public CommitMessage StartKeygen() { var biVarPoly = BiVarSymmetricPolynomial.Random(Faulty); var commitment = biVarPoly.Commit(); var rows = Enumerable.Range(1, Players) .Select(i => biVarPoly.Evaluate(i)) .Select((row, i) => EncryptRow(row, _publicKeys[i])) .ToArray(); return(new CommitMessage { Commitment = commitment, EncryptedRows = rows }); }
public void SymmetricPolynomialIsSymmetric() { var rnd = new Random(); var p = BiVarSymmetricPolynomial.Random(5); int x = rnd.Next(), y = rnd.Next(); var vxy = Eval(p, x, y); var vyx = Eval(p, y, x); Assert.AreEqual(vxy, vyx); var c = p.Commit(); var cxy = c.Evaluate(x, y); var cyx = c.Evaluate(y, x); Assert.AreEqual(cxy, cyx); }
private TransactionReceipt MakeCommitTransaction() { var biVarPoly = BiVarSymmetricPolynomial.Random(0); var commitment = biVarPoly.Commit().ToBytes(); var row = new Byte[0]; var tx = _transactionBuilder.InvokeTransactionWithGasPrice( _wallet.EcdsaKeyPair.PublicKey.GetAddress(), ContractRegisterer.GovernanceContract, Money.Zero, GovernanceInterface.MethodKeygenCommit, 0, UInt256Utils.ToUInt256(GovernanceContract.GetCycleByBlockNumber(_stateManager.LastApprovedSnapshot.Blocks.GetTotalBlockHeight())), commitment, new byte[][] { row } ); var res = Signer.Sign(tx, _wallet.EcdsaKeyPair, true); Assert.False(_eventData.ContainsKey(res.Hash)); _eventData.Add(res.Hash, ByteString.CopyFrom(ContractEncoder.Encode(GovernanceInterface.EventKeygenCommit, commitment, new byte[][] { row }))); return(res); }
private static Fr Eval(BiVarSymmetricPolynomial p, int x, int y) { var t = p.Evaluate(x).ToArray(); return(MclBls12381.EvaluatePolynomial(t, Fr.FromInt(y))); }