Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,7 @@ This document proposes a standard for the FROST threshold signature scheme that

## Changelog

- *0.4.3* (2026-05-13): Expand test vector coverage for signing and tweaking error cases, and add a test vectors summary document.
- *0.4.2* (2026-04-14): Bind *my_id* and the signer identifiers list into the *DeterministicSign* nonce hash to prevent a secret share recovery attack via replayed signing sessions.
- *0.4.1* (2026-03-03): Assign blame to signer index (of the input list) instead of their identifier value
- *0.4.0* (2026-01-30): Number 445 was assigned to this BIP.
Expand Down
5 changes: 3 additions & 2 deletions python/frost_ref/signing.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,9 @@ def validate_signers_ctx(signers_ctx: SignersContext) -> None:
raise ValueError("The pubshares and ids arrays must have the same length.")
for idx, (i, pubshare) in enumerate(zip(ids, pubshares)):
if not 0 <= i <= n - 1:
raise ValueError(f"Invalid participant identifier at index {idx}.")
raise ValueError(
f"The participant identifier at index {idx} is out of range."
)
try:
_ = GE.from_bytes_compressed(pubshare)
except ValueError:
Expand Down Expand Up @@ -376,7 +378,6 @@ def deterministic_sign(
secshare_ = xor_bytes(secshare, tagged_hash("FROST/aux", rand))
else:
secshare_ = secshare
# REVIEW: do we need to add any check for ids & pubshares (in signers_ctx context) here?
validate_signers_ctx(signers_ctx)
_, _, ids, _, thresh_pk = signers_ctx
tweaked_tpk = get_xonly_pk(thresh_pubkey_and_tweak(thresh_pk, tweaks, is_xonly))
Expand Down
Loading
Loading