Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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