public ShareRenewalRound(Party me, Quorum quorumFrom, Quorum quorumTo, BigZp[] startShares, BigInteger prime, int startSharesPerParty, int finalSharesPerParty, ulong protocolId) : base(me, new Quorum[] { quorumFrom, quorumTo }, protocolId) { FinalSharesPerParty = finalSharesPerParty; StartSharesPerParty = startSharesPerParty; StartShares = startShares; Prime = prime; ReceivedReshareCount = 0; foreach (var from in Quorums[0].Members) { sharesRecv[from] = new List <ShareWitnessMsg <BigZp> > [startSharesPerParty]; for (int i = 0; i < startSharesPerParty; i++) { numCommitsRecv[from] = 0; sharesRecv[from][i] = new List <ShareWitnessMsg <BigZp> >(); } } StartShareCount = Quorums[FROM].Size * StartSharesPerParty; FinalShareCount = Quorums[TO].Size * FinalSharesPerParty; NewPolyDeg = (int)Math.Ceiling(FinalShareCount / 3.0) - 1; VandermondeInv = StaticCache.GetVandermondeInvColumn(Prime, StartShareCount); if (Quorums[TO].HasMember(Me.Id)) { var quorumIter = Quorums[TO].Members.GetEnumerator(); int i = 0; while (quorumIter.MoveNext()) { if (Me.Id == quorumIter.Current) { MyQuorumIndex = i; break; } i++; } } if (Quorums[TO] is ByzantineQuorum) { var byzTo = Quorums[TO] as ByzantineQuorum; if (FinalShareCount == Quorums[TO].Size) { PolyCommit = byzTo.PolyCommit; } else { PolyCommit = new PolyCommit(); PolyCommit.Setup(NewPolyDeg + 1, byzTo.Seed); } } }