public List <SecretSharingBenchmarkReport> BenchmarkAllKeys(int MinN, int MaxN, int MinK, int MaxK, string[] Keys, int step, SecretSharingBenchmarkReport.OperationType operation, int iterate, List <LoadedPrimeNumber> loadedPrimes) { var result = new List <SecretSharingBenchmarkReport>(); foreach (var key in Keys) { result.AddRange(BenchmarkKey(MinN, MaxN, MinK, MaxK, step, operation, key, iterate, loadedPrimes)); } return(result); }
private IEnumerable <SecretSharingBenchmarkReport> BenchmarkKeyWithChunkSize(int[] chunkSize, int MinN, int MaxN, int MinK, int MaxK, int step, SecretSharingBenchmarkReport.OperationType operation, string key, int iterate, List <LoadedPrimeNumber> LoadedPrimes) { var filteredPrimes = LoadedPrimes.Where(po => po.PrimeSize == key.Length).ToList(); PrimeGenerator.SetLoadedPrimes(filteredPrimes); List <SecretSharingBenchmarkReport> results = new List <SecretSharingBenchmarkReport>(); //Parallel.For(5, MaxN, n => //{ for (int n = MinN; n <= MaxN; n += step) { //k can not be bigger than n //Parallel.For(1, MaxK, k => //{ for (int k = MinK; k <= n && k <= MaxK;) { for (int iteratechunk = 0; iteratechunk < chunkSize.Length; iteratechunk++) { ///skip if the chunk is bigger than the secret if (chunkSize[iteratechunk] * 8 > key.Length * 8) { break; } List <IShareCollection> shares = null; //if (operation.HasFlag(SecretSharingBenchmarkReport.OperationType.ShareGeneration)) //{ double primeTime = 0; double allTime = 0; var ElapsedTicks = new List <long>(); filteredPrimes = LoadedPrimes.Where(po => po.PrimeSize == chunkSize[iteratechunk]).ToList(); PrimeGenerator.SetLoadedPrimes(filteredPrimes); var redivide = Antix.Testing.Benchmark.Run(() => shares = DivideSecretWithChunkSizeWrapper(n, k, chunkSize[iteratechunk], key #if calcPrimeTime , ref primeTime, ref allTime #endif , ref ElapsedTicks), iterate); //In the function //var primegenerationTime = primeTime / iterate; //if (allTime < primeTime) //{ // throw new Exception("AVG Prime generation time is bigger than all elapsed time AVG"); //} results.Add(new SecretSharingBenchmarkReport() { n = n, chunkSize = chunkSize[iteratechunk], k = k, TotalElapsedMilliseconds = #if calcPrimeTime Math.Sqrt((1.0 / (double)iterate) * allTime) / (double)TimeSpan.TicksPerMillisecond #else redivide.Average.TotalMilliseconds, #endif ElapsedTicks = ElapsedTicks.ToArray(), keyLength = key /*s[i]*/.Length * 8, Operation = SecretSharingBenchmarkReport.OperationType.ShareGeneration, #if calcPrimeTime primeGenerationTime = Math.Sqrt((1.0 / (double)iterate) * primeTime) / (double)TimeSpan.TicksPerMillisecond #endif });
public List <SecretSharingBenchmarkReport> BenchmarkPrimeWithChunkSize(int[] chunkSize, int MinN, int MaxN, int MinK, int MaxK, string[] Keys, int step, SecretSharingBenchmarkReport.OperationType operation, int iterate) { var reports = new List <SecretSharingBenchmarkReport>(); for (int i = 0; i < Keys.Length; i++) { reports.AddRange(BenchmarkPrimeWithChunkSize(chunkSize, MinN, MaxN, MinK, MaxK, step, Keys[i], iterate)); } return(reports); }
public IEnumerable <SecretSharingBenchmarkReport> BenchmarkKey(int MinN, int MaxN, int MinK, int MaxK, int step, SecretSharingBenchmarkReport.OperationType operation, string key, int iterate, List <LoadedPrimeNumber> loadedPrimes) { List <SecretSharingBenchmarkReport> results = new List <SecretSharingBenchmarkReport>(); var filteredPrimes = loadedPrimes.Where(po => po.PrimeSize == key.Length * 8).ToList(); PrimeGenerator.SetLoadedPrimes(filteredPrimes); Schoenmakers schoenmakers = new Schoenmakers(); pke = new PublicKeyEncryption(); //TODO: ensure it's secure enough int fieldSize = key.Length * 8; for (int n = MinN; n <= MaxN; n += step) { //k can not be bigger than n //Parallel.For(1, MaxK, k => //{ List <long> initProtocolElapsedTicks = new List <long>(); Antix.Testing.Benchmark.Run(() => InitProtocolWrapper(ref schoenmakers, n, fieldSize, ref initProtocolElapsedTicks), iterate); results.Add(new SecretSharingBenchmarkReport() { n = n, k = 0, ElapsedTicks = initProtocolElapsedTicks.ToArray(), keyLength = key.Length * 8, Operation = SecretSharingBenchmarkReport.OperationType.InitProtocol, }); //for (int k = MinK; k <= n && k <= MaxK; ) //{ // List<long> verifySharesElapsedTicks = new List<long>(); // List<long> divideRandomSecretElapsedTicks = new List<long>(); // var decryptShareElapsedTicks = new List<long>(); // var verifyDecryptedSharesTicks = new List<long>(); // var reconstructRandomSecretElapsedTicks = new List<long>(); // byte[] secret = null; // Antix.Testing.Benchmark.Run(() => // { // List<Byte[]> Commitments = new List<byte[]>(); // byte[] U = null; // List<SchoenmakersShare> shares = null; // shares = DivideRandomSecretWrapper(ref schoenmakers, n, k, ref secret, ref divideRandomSecretElapsedTicks, ref Commitments); // List<byte[]> publickeys = keypairs.Select(po => po.Item2).ToList(); // VerifyDistributedShares(ref schoenmakers, shares, Commitments, publickeys, ref verifySharesElapsedTicks); // DecryptSharesWrapper(ref schoenmakers, ref shares, keypairs, ref decryptShareElapsedTicks); // VerifyDecryptedShares(ref schoenmakers, shares, k, ref verifyDecryptedSharesTicks); // ReconstructRandomSecretWrapper(ref schoenmakers, shares, k, ref reconstructRandomSecretElapsedTicks); // }, iterate); // #region adding results // results.Add(new SecretSharingBenchmarkReport() // { // n = n, // k = k, // ElapsedTicks = divideRandomSecretElapsedTicks.ToArray(), // keyLength = key.Length * 8, // Operation = SecretSharingBenchmarkReport.OperationType.ShareGenerationRandomSecret, // }); // results.Add(new SecretSharingBenchmarkReport() // { // n = n, // k = k, // ElapsedTicks = verifySharesElapsedTicks.ToArray(), // keyLength = key.Length * 8, // Operation = SecretSharingBenchmarkReport.OperationType.VerifyShares, // }); // results.Add(new SecretSharingBenchmarkReport() // { // n = n, // k = k, // ElapsedTicks = decryptShareElapsedTicks.ToArray(), // keyLength = key.Length * 8, // Operation = SecretSharingBenchmarkReport.OperationType.DecryptShares, // }); // results.Add(new SecretSharingBenchmarkReport() // { // n = n, // k = k, // ElapsedTicks = verifyDecryptedSharesTicks.ToArray(), // keyLength = key.Length * 8, // Operation = SecretSharingBenchmarkReport.OperationType.VerifyPooledShares, // }); // results.Add(new SecretSharingBenchmarkReport() // { // n = n, // k = k, // ElapsedTicks = reconstructRandomSecretElapsedTicks.ToArray(), // keyLength = key.Length * 8, // Operation = SecretSharingBenchmarkReport.OperationType.RandomSecretReconstruction, // }); // #endregion // Console.WriteLine("Iteration info: n:{0} t:{1} keySize:{2}", n, k, key/*s[i]*/.Length * 8); // if (k == 1) k = step; // else k += step; //} }//); var orderedResults = results.OrderBy(po => po.n).ThenBy(po => po.k); return(orderedResults); }