//[InlineData(10, 10)] public void TestSplitJoin_FixedValue_DiffInstance_CustomInterface(int shareCount, int threshold) { var secretInt = 129; var ss1 = new TrivialShamirsSecretSharing(); var shares = ss1.Split(secretInt, shareCount, threshold); var joinShares = shares.Take(threshold); var ss2 = new TrivialShamirsSecretSharing(); var clear = ss2.Join(joinShares.ToArray()); Assert.Equal(secretInt, clear); }
public void TestTrivialFixed_Matches_Trivial(int available, int needed) { var sss1 = new TrivialFixedShamirsSecretSharing(); var sss2 = new TrivialShamirsSecretSharing(); var secretInt = 129; var split1 = sss1.Split(secretInt, available, needed); var shares1 = split1.Select(x => { var bytes = new byte[sizeof(int) * 2]; Array.Copy(BitConverter.GetBytes(x.Item1), 0, bytes, 0, sizeof(int)); Array.Copy(BitConverter.GetBytes(x.Item2), 0, bytes, sizeof(int), sizeof(int)); return(bytes); }); var split2 = sss2.Split(secretInt, available, needed); var shares2 = sss2.Shares; //Assert.Equal(shares1, shares2); var rand = new Random(); var indexOrder = split1.OrderBy(x => rand.Next()).Select(x => x.Item1 - 1).Take(needed); // var joinShares1 = split1.Where(x => indexOrder.Contains(x.Item1)); // var joinShares2 = split2.Where(x => indexOrder.Contains(x.Item1)); var joinShares1 = indexOrder.Select(x => split1.ElementAt(x)); var joinShares2 = indexOrder.Select(x => split2.ElementAt(x)); Console.WriteLine($"Indexes : " + string.Join(",", indexOrder)); Console.WriteLine($"Indexes1: {joinShares1.Count()} " + string.Join(",", joinShares1.Select(x => x.Item1 - 1))); Console.WriteLine($"Indexes2: {joinShares2.Count()} " + string.Join(",", joinShares2.Select(x => x.Item1 - 1))); var join1 = sss1.Join(joinShares1.ToList()); var join2 = sss2.Join(joinShares2.ToArray()); Assert.Equal(secretInt, join1); // Assert.Equal(join1, join2); }