GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Reuse field inversions in Shamir recovery and division by carstenartur · Pull Request #2558 · bcgit/bc-java

Conversation

@carstenartur

@carstenartur carstenartur commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

Reduce repeated field inversions in ShamirSplitSecret.getSecret() and divide(), preserving the existing API.

  • Accumulate interpolation numerator and denominator products, then invert once per coefficient: 16,256 to 128 inversions for 128 shares.
  • Reuse one inverse per eligible share row: 256 to 8 inversions for eight 32-byte shares.
  • Keep the original behavior for Polynomial subclasses and small inputs.
  • Add scaling and overridden-division regression tests to the threshold suite.

Verification at upstream e40316b:

  • 16 threshold JUnit tests pass on Java 17 with --release 8.
  • Both new subclass regressions fail on the unguarded optimization and pass on upstream original and this candidate.
  • All 1,594 differential probe outputs match original, Sandbox-generated and candidate source.
  • With -Xlint:all -Xmaxwarns 10000, both builds report the same 101 existing warnings; no added diagnostics in the threshold test closure.
  • git diff --check passes.

The full Gradle/core suite, Checkstyle and JMH were not run for this submission. Counts above refer to field inversions, not a measured runtime speedup.

Identified by the Sandbox mathematics cleanup:
https://github.com/carstenartur/sandbox
Sandbox qualification:
https://github.com/carstenartur/sandbox/actions/runs/42453057191/job/128646172609

Generated source was adapted for naming, comments and formatting while preserving its guards, masks, fallback paths and per-row schedule. ChatGPT assisted with preparation, regression tests and review.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@carstenartur
Reuse field inversions in Shamir recovery and division
83cc68b
Accumulate interpolation numerator and denominator products before
inverting, and reuse an inverse within each share row during division.
Keep the original paths for Polynomial subclasses and small inputs.
Add scaling and overridden-division regression coverage.

Identified with the Sandbox mathematics cleanup:
https://github.com/carstenartur/sandbox
AI-assisted preparation and review.
Copilot AI balanced review requested due to automatic review settings November 8, 2026 18:33
Copilot started reviewing on behalf of carstenartur November 8, 2026 18:34
View session
Copilot AI reviewed Nov 8, 2026
View reviewed changes

Copilot AI left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

🟢 Approval recommended

No active review issues block the change to reduce repeated finite-field inversions.

No open issues 🎉

What changed in this PR

This PR reduces repeated finite-field inversions in Shamir secret recovery and share division while preserving the existing API and fallback behavior for Polynomial subclasses and small inputs.

Changes:

  • Combine interpolation products to use one inversion per recovery coefficient.
  • Reuse one inverse per eligible share row during division.
  • Add scaling and overridden-division regression tests to the threshold suite.
File Description
core/​src/​test/​java/​org/​bouncycastle/​crypto/​threshold/​test/​ShamirSecretSplitterTest.java Tests recovery after scaling shares and dividing them back.
core/​src/​test/​java/​org/​bouncycastle/​crypto/​threshold/​test/​AllTests.java Registers the new subclass regression tests.
core/​src/​test/​java/​org/​bouncycastle/​crypto/​threshold/​ShamirSplitSecretTest.java Verifies recovery and division preserve overridden division behavior.
core/​src/​main/​java/​org/​bouncycastle/​crypto/​threshold/​ShamirSplitSecret.java Reuses inversions in recovery and division, retaining fallback paths.

Review effort: Balanced

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@dghgit dghgit self-assigned this Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

Copilot code review Copilot
Copilot review effort
Applies to this pull request for everyone.Learn more about Copilot code review.
Copilot left review comments

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@dghgit dghgit

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@carstenartur @dghgit
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.