• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

KarpelesLab / tss-lib / 26678642827
76%

Build:
DEFAULT BRANCH: master
Ran 30 May 2026 09:28AM UTC
Jobs 1
Files 174
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

30 May 2026 07:53AM UTC coverage: 76.406% (-0.09%) from 76.496%
26678642827

push

github

MagicalTux
mldsatss: per-party round-3 response validity for identifiable abort

FIX 2 (Low). combine() previously summed every party's z_i block
unconditionally with no per-party validity check, so a single malicious party
could submit garbage z_i and force ErrAllTriesRejected for the whole committee
with no attribution (a silent DoS).

Add validatePartyResponses(), run before aggregation in combine(): each
party's non-zero z_i block must satisfy the L-part of that party's own
rejection gate, i.e. its nu-scaled L2 norm Sum_L (z_i[j]/nu)^2 must not exceed
Rp^2. An honest party either rejects a try (all-zero block, passes trivially)
or accepts it (block came from a zf that passed !zf.Excess(R, nu), so the
L-part alone is within R, and rounding stays inside Rp). Gross garbage (the DoS
vector) exceeds Rp^2 and is rejected with *ErrPartyResponseInvalid naming the
offending committee slot and keyId.

PARTIAL: this is a structural bound, not a full algebraic check. A full
identifiable abort would verify HighBits(A*z_i - c*t_i) == HighBits(w_i)
against the committed w_i, which needs each party's public key share
t_i = A*s1_i + s2_i. This trusted-dealer protocol never transmits or stores
t_i (only the aggregate t1 is public), so a small-but-wrong z_i that passes
the bound still surfaces as the non-attributable ErrAllTriesRejected.
Closing that gap requires publishing per-party t_i or a per-party
commitment/proof binding z_i to w_i.

Adds TestSigning44_InvalidResponseIsAttributed: a party broadcasts a
saturated garbage z_i and the honest combiner returns *ErrPartyResponseInvalid
naming its slot rather than ErrAllTriesRejected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

41 of 45 new or added lines in 1 file covered. (91.11%)

344 existing lines in 9 files now uncovered.

17419 of 22798 relevant lines covered (76.41%)

124171.97 hits per line

Uncovered Changes

Lines Coverage ∆ File
4
84.0
1.72% mldsatss/signing.go

Coverage Regressions

Lines Coverage ∆ File
147
69.95
-7.67% frostristretto255tss/resharing.go
62
72.95
-0.1% frostristretto255tss/keygen.go
51
84.0
1.72% mldsatss/signing.go
33
78.01
1.13% dklstss/signing_party.go
29
65.23
1.87% dklstss/signing_checked_party.go
14
85.21
-0.97% common/hash.go
4
68.29
-2.44% crypto/mta/range_proof.go
2
92.71
-2.08% ecdsa/keygen/prepare.go
2
94.62
0.0% ecdsatss/prepare.go
Jobs
ID Job ID Ran Files Coverage
1 26678642827.1 30 May 2026 09:28AM UTC 174
76.41
GitHub Action Run
Source Files on build 26678642827
  • Tree
  • List 174
  • Changed 12
  • Source Changed 8
  • Coverage Changed 11
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26678642827
  • 817ef8bf on github
  • Prev Build on master (#26677818565)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc