This is a test project. It is not production ready and is unlilely to ever be. You have been warned.
- Implementation of Belare and Neven Multi-signature
- See "Multi-Signatures in the Plain Public-Key Model and a General Forking Lemma"
- Rough port of Java implementation
var signatureService = new MultiSignature(_sepSecp256K1);
var signers = new List<byte[]>();
var commitmentSecrets = new List<byte[]>();
var commitments = new List<byte[]>();
var alice = new Participant("Alice");
var bob = new Participant("Bob");
var carol = new Participant("Carol");
long bitmap = 0;
var message = string
.Concat("The quick brown fox jumps over the lazy dog.".Select(x => ((int) x).ToString("x")))
.ToByteArray();
signers.Add(alice.PublicKey);
signers.Add(bob.PublicKey);
signers.Add(carol.PublicKey);
for (var i = 0; i < signers.Count; i++)
{
bitmap = (bitmap << 1) | 1;
commitmentSecrets.Add(signatureService.ComputeCommitmentSecret());
commitments.Add(signatureService.ComputeCommitment(commitmentSecrets[i]));
}
var aggregatedCommitment = signatureService.AggregateCommitments(commitments, bitmap);
var challenge =
signatureService.ComputeChallenge(signers, alice.PublicKey, aggregatedCommitment, message, bitmap);
var signature = signatureService.ComputeSignatureShare(challenge, alice.PrivateKey, commitmentSecrets[0]);
Assert.IsTrue(signatureService.VerifySignatureShare(
signers,
alice.PublicKey,
signature,
aggregatedCommitment,
commitments[0],
message,
bitmap));
- Publicly Verifiable Secret Sharing
- A Practical (Non-interactive) Publicly Verifiable Secret Sharing Scheme
- Distributed Key Generation with Ethereum Smart Contracts
- ETHDKG: Distributed Key Generation with Ethereum Smart Contracts
- Keeping Time-Release Secrets through Smart Contracts
- On The Applicability Of Secret Sharing Cryptography In Secure Cloud Services
- MPSS: Mobile Proactive Secret Sharing
- SilentDelivery: Practical Timed-delivery of Private Information using Smart Contracts
- A Simple Publicly Verifiable Secret Sharing Scheme and its Application to Electronic Voting
- ECDKG: A Distributed Key Generation Protocol Based on Elliptic Curve Discrete Logarithm
- Fast Multiparty Threshold ECDSA with Fast Trustless Setup