コード例 #1
0
        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);
        }
コード例 #2
0
        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
                        });
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }