//[InlineData(10, 10)] public void TestSplitJoin_SameInstance(int shareCount, int threshold) { int secretInt; // using (var rng = RandomNumberGenerator.Create()) // { // var arr = new byte[sizeof(int)]; // rng.GetBytes(arr); // secretInt = BitConverter.ToUInt16(arr, 0); // } secretInt = 256; var secret = BitConverter.GetBytes(secretInt); var ss1 = new TrivialShamirsSecretSharing(); var crypt = ss1.Split(secret, shareCount, threshold); var shares = ss1.Shares.ToArray(); var ss2 = new TrivialShamirsSecretSharing(); ss2.Shares = shares.Take(threshold); var clear = ss2.Combine(crypt); var value = BitConverter.ToInt32(clear, 0); Assert.Equal(secret, clear); Assert.Equal(secretInt, value); }
//[InlineData(10, 10)] public void TestSplitJoin_FixedValue_SameInstance_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 = ss1; var clear = ss2.Join(joinShares.ToArray()); Assert.Equal(secretInt, clear); }
//[InlineData(10, 10)] public void TestSplitJoin_FixedValue_SameInstance(int shareCount, int threshold) { var secretInt = 129; var ss1 = new TrivialShamirsSecretSharing(); //var rawShares = ss1.Split(secretInt, shareCount, threshold); ss1.Split(BitConverter.GetBytes(secretInt), shareCount, threshold); var shares = ss1.Shares; var joinShares = shares.Take(threshold); ss1.Shares = joinShares; var ss2 = ss1; var clearInt = ss2.Join(); //var clearInt = BitConverter.ToInt32(clear, 0); Assert.Equal(secretInt, clearInt); }
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); }