PostQuantum.SecretSharing.Extensions
2.2.0
dotnet add package PostQuantum.SecretSharing.Extensions --version 2.2.0
NuGet\Install-Package PostQuantum.SecretSharing.Extensions -Version 2.2.0
<PackageReference Include="PostQuantum.SecretSharing.Extensions" Version="2.2.0" />
<PackageVersion Include="PostQuantum.SecretSharing.Extensions" Version="2.2.0" />
<PackageReference Include="PostQuantum.SecretSharing.Extensions" />
paket add PostQuantum.SecretSharing.Extensions --version 2.2.0
#r "nuget: PostQuantum.SecretSharing.Extensions, 2.2.0"
#:package PostQuantum.SecretSharing.Extensions@2.2.0
#addin nuget:?package=PostQuantum.SecretSharing.Extensions&version=2.2.0
#tool nuget:?package=PostQuantum.SecretSharing.Extensions&version=2.2.0
PostQuantum.SecretSharing.Extensions
Opt-in higher-level ceremony helpers for PostQuantum.SecretSharing. Like the core, this package has no third-party runtime dependency.
The first helper is distributed proactive secret sharing: re-randomize a K-of-N
sharing so that shares from an earlier epoch become useless — without ever reconstructing
the secret. This defeats a mobile adversary that compromises different trustees over
time, and unlike the core's Refresh (which briefly reconstructs and re-splits), the secret
is never formed in memory.
Re-randomize without reconstructing (co-located)
using PostQuantum.SecretSharing;
using PostQuantum.SecretSharing.Extensions;
SecretShare[] shares = ShamirSecretSharing.Split(secret, new SharePolicy(3, 5));
// New epoch: shares are re-randomized; the secret never appears in memory.
SecretShare[] refreshed = ProactiveRefresh.RefreshLocally(shares);
// Old shares no longer combine with new ones; any 3 refreshed shares still recover the secret.
Distributed protocol (multi-party, no trusted machine)
int[] parties = shares.Select(s => s.ShareIndex).ToArray();
// 1. Each party publishes a contribution (one sub-share per recipient) and delivers each
// sub-share point-to-point — NOT broadcast.
IReadOnlyList<RefreshSubShare> mine = ProactiveRefresh.CreateContribution(
contributorIndex: myIndex, threshold: 3, secretLength: secret.Length, recipientIndices: parties);
// 2. Each party applies the sub-shares addressed to it, yielding its refreshed share.
SecretShare refreshedMine = ProactiveRefresh.Apply(myShare, subSharesAddressedToMe);
The honest tradeoff
This is the honest-but-curious construction:
- Secrecy is preserved against a minority adversary, and the secret is never reconstructed.
- It does not prove a contributor used a zero constant term, so a malicious contributor could corrupt (never learn) the secret. Corruption is detected: the secret is unchanged, so the preserved check value fails at the next reconstruction — reject the round and keep the old shares.
Full design, protocol, and limitations: docs/PROACTIVE-REFRESH.md.
Documentation
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- PostQuantum.SecretSharing (>= 2.2.0)
-
net8.0
- PostQuantum.SecretSharing (>= 2.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.2.0 | 96 | 6/14/2026 |