Skip to content

document the relaxed guarantee and add a two-run example - #11

Open
noot wants to merge 3 commits into
mainfrom
noot/two-run-example
Open

noot wants to merge 3 commits into
mainfrom
noot/two-run-example

Conversation

@noot

@noot noot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

Adds a "Guarantee" section to the README and examples/two_run.rs. No library change.

paper divergence

The code implements one execution of the protocol, which gives the relaxed functionality from "Ideal Functionalities": honest clients stay anonymous, but the adversary sees the honest messages before the corrupt clients choose theirs, so a corrupt client's message may depend on them. "From Relaxed to Full Anonymous Broadcast" lifts this by running the protocol twice with fresh parameters and server keys, commitments first and openings second, matched at the recipient. That is orchestration over two ordinary executions, so it stays on the application side; the example shows the full pattern with a hash commitment, including a client that commits and never opens and one that opens to a different message. The README now states which guarantee the library delivers and points at the example.

The example calls run_server_round with the signature on main; once the server verification branch merges it needs the two extra arguments.

noot added 3 commits October 29, 2026 15:00
One execution gives the paper's relaxed anonymous broadcast, where a corrupt
client may choose its message after seeing the honest ones. The example shows
the paper's lift to the full notion: two executions with fresh parameters,
commitments first and openings second, matched at the recipient.
@noot
noot requested a balanced review from Copilot October 29, 2026 23:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Duplicate commitment digests let a corrupt client copy an honest commitment and its revealed opening across executions, causing acceptance of an extra message dependent on the honest input and breaking input independence.

2 open issues
What changed in this PR

This PR documents the library’s relaxed anonymous-broadcast guarantee and illustrates application-side orchestration of two protocol executions, without changing library code.

Changes:

  • Adds a README guarantee section explaining input dependence and the commitment/opening approach.
  • Adds a two-run example with fresh parameters and server keys, cover traffic, a missing opening, and a mismatched opening.
File Description
README.md Describes the relaxed guarantee and links to the two-run example.
examples/​two_run.rs Demonstrates commitment and opening rounds with recipient-side matching and output assertions.

Review effort: Balanced

Comment thread examples/two_run.rs
let mut unopened: HashMap<[u8; COMMIT_BYTES], usize> = HashMap::new();
for c in &commitments {
let c: [u8; COMMIT_BYTES] = c[..COMMIT_BYTES].try_into().expect("commitment width");
*unopened.entry(c).or_default() += 1;
Comment thread README.md
Comment on lines +47 to +48
and every message from a client that posts a complete round is delivered as
long as fewer than half the servers are corrupt. What the relaxed notion gives
@noot noot changed the title documents the relaxed guarantee and adds a two-run example document the relaxed guarantee and add a two-run example Oct 30, 2026
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.

2 participants