Пример #1
0
        public static List <AccessStructure> ExploreAllPossibleAccessStructures(IEnumerable <Trustee> participants)
        {
            List <QualifiedSubset> qss = new List <QualifiedSubset>();

            // build up all possible access structure for given input trustees
            for (int i = 1; i <= participants.Count(); i++)
            {
                var combs = GetKCombs <Trustee>(participants, i);
                foreach (var com in combs)
                {
                    QualifiedSubset qs = new QualifiedSubset(com);
                    qss.Add(qs);
                    Console.Write(qs.ToString() + '\t');
                }
                Console.WriteLine();
            }

            List <AccessStructure> accesses = new List <AccessStructure>();

            for (int i = 2; i <= qss.Count; i++)
            {
                var combinedaccesses = GetKCombs <QualifiedSubset>(qss, i);
                foreach (var ac in combinedaccesses)
                {
                    var access = new AccessStructure(ac.ToList());
                    accesses.Add(access);
                    Console.Write(access.ToString() + '\t');
                }

                Console.WriteLine();
            }

            return(accesses);
        }
Пример #2
0
        public void TestExpandAccessStructure()
        {
            Trustee p1, p2, p3, p4;

            p1 = new Trustee(1);
            p2 = new Trustee(2);
            p3 = new Trustee(3);
            p4 = new Trustee(4);

            QualifiedSubset qs1, qs2, qs3;

            qs1 = new QualifiedSubset();
            qs1.Parties.Add(p2);
            qs1.Parties.Add(p3);

            qs2 = new QualifiedSubset();
            qs2.Parties.Add(p1);
            qs2.Parties.Add(p2);
            qs2.Parties.Add(p4);

            qs3 = new QualifiedSubset();
            qs3.Parties.Add(p1);
            qs3.Parties.Add(p3);
            qs3.Parties.Add(p4);

            AccessStructure access = new AccessStructure();

            access.Accesses.Add(qs1);
            access.Accesses.Add(qs2);
            access.Accesses.Add(qs3);

            List <Trustee> trustees = new List <Trustee>()
            {
                p1, p2, p3
            };

            ExpandAllAccessPaths(trustees);
        }
Пример #3
0
        static void Main(string[] args)
        {
            //BenalohLeichterBenchmark blb = new BenalohLeichterBenchmark();
            //blb.ExploreAllPossibleAccessStructures(new QualifiedSubset("p1^p2^p3").Parties);

            //Console.Read();
            //return;

            if (args.Length == 0)
            {
                printHelp(); return;
            }
            string op       = args[0].Trim().ToLower();
            var    filePath = "";

            if (op == "benchmark-shamir")
            {
                var minN         = Convert.ToInt32(args[1]);
                var maxN         = Convert.ToInt32(args[2]);
                var minK         = Convert.ToInt32(args[3]);
                var maxK         = Convert.ToInt32(args[4]);
                var step         = Convert.ToInt32(args[5]);
                var Keys         = args[6].Split(',');
                var primePath    = args[7];
                var primeXML     = new XMLSerializer <PrimePersistanceReport>();
                var loadedPrimes = primeXML.Deserialize(primePath.Replace("output=", ""));
                //var primes =

                filePath = BenchmarkToPersistenceStorage(minN, maxN, minK, maxK, step, Keys, SecretSharingBenchmarkReport.SSAlgorithm.Shamir, loadedPrimes.Primes);
                Console.WriteLine(string.Format("Benchmarking is done!\nResults are dumped to {0}", filePath));
            }
            else if (op == "generate-prime")
            {
                var                    sizes    = args[1].Split(',');
                var                    count    = Convert.ToInt32(args[2]);
                var                    path     = args[3].Replace("output=", "");
                BenchmarkPrime         gprime   = new BenchmarkPrime();
                var                    re       = gprime.BenchmarkPrimes(sizes, count);
                var                    ser      = new XMLSerializer <PrimePersistanceReport>();
                PrimePersistanceReport primeXml = new PrimePersistanceReport();
                primeXml.Primes = re;
                ser.Serialize(primeXml, path);
            }
            else if (op == "benchmark-schoen")
            {
                var minN         = Convert.ToInt32(args[1]);
                var maxN         = Convert.ToInt32(args[2]);
                var minK         = Convert.ToInt32(args[3]);
                var maxK         = Convert.ToInt32(args[4]);
                var step         = Convert.ToInt32(args[5]);
                var Keys         = args[6].Split(',');
                var primePath    = args[7];
                var primeXML     = new XMLSerializer <PrimePersistanceReport>();
                var loadedPrimes = primeXML.Deserialize(primePath);

                filePath = BenchmarkToPersistenceStorage(minN, maxN, minK, maxK, step, Keys, SecretSharingBenchmarkReport.SSAlgorithm.Schoenmakers, loadedPrimes.Primes);
                Console.WriteLine(string.Format("Benchmarking is done!\nResults are dumped to {0}", filePath));
            }
            else if (op == "benchmark-benaloh")
            {
                var access  = new QualifiedSubset(args[1]);
                var iterate = Convert.ToInt32(args[2]);
                var Keys    = args[3].Split(',');
                var type    = args[4];
                List <LoadedPrimeNumber> primes = null;
                if (args.Count() > 5)
                {
                    var primeXML     = new XMLSerializer <PrimePersistanceReport>();
                    var loadedPrimes = primeXML.Deserialize(args[5]);
                    primes = loadedPrimes.Primes;
                }
                if (string.IsNullOrEmpty(type) || (type != "scheme" && type != "share"))
                {
                    throw new Exception("scheme or share please define");
                }
                filePath = BenchmarkBenalohToPersistenceStorage(access.Parties, Keys, iterate, type, primes);
                Console.WriteLine(string.Format("Benchmarking is done!\nResults are dumped to {0}", filePath));
            }
            else if (op == "benchmarkprime")
            {
                var minN = Convert.ToInt32(args[1]);
                var maxN = Convert.ToInt32(args[2]);
                var minK = Convert.ToInt32(args[3]);
                var maxK = Convert.ToInt32(args[4]);
                var step = Convert.ToInt32(args[5]);
                var Keys = args[6].Split(',');

                filePath = BenchmarkPrimeToPersistenceStorage(minN, maxN, minK, maxK, step, Keys);
                Console.WriteLine(string.Format("Benchmarking is done!\nResults are dumped to {0}", filePath));
            }
            else if (op == "report-shamir" || op == "report-schoen")
            {
                if (args.Length == 1 || string.IsNullOrEmpty(args[1]) || !File.Exists(args[1]))
                {
                    printHelp();
                    return;
                }
                filePath = args[1];
                var outputPath  = args[2].Replace("output=", "");
                var comparepath = "";

                var ser = new XMLSerializer <PersistanceReport>();
                PersistanceReport compareReport = null;
                if (args.Length > 2)
                {
                    comparepath   = args[3];
                    compareReport = ser.Deserialize(comparepath);
                }

                //var filePath = "SerializedReports-n100-k60-iterate100.xml";
                var report = ser.Deserialize(filePath);
                var rep    = from r in report.Reports
                             group r by r.keyLength into g
                             select g;


                foreach (var item in rep)
                {
                    PersistanceReport grep = new PersistanceReport();
                    grep.Reports = item.ToList();
                    grep.KeySize = item.Key;
                    grep.N       = item.Max(po => po.n); // report.N;
                    grep.K       = item.Max(po => po.k); // report.K;
                    grep.Step    = report.Step;
                    grep.Iterate = report.Iterate;

                    if (op == "report-shamir")
                    {
                        HandleReports(grep, outputPath);
                    }
                    else
                    {
                        HandleReportsGeneric(grep, outputPath, compareReport);

                        //Generate aggeragted decrypt + verify poold + reconstruct
                        if (item.Key / 2 >= 128)
                        {
                            var compreport   = compareReport.Reports.Where(po => po.keyLength == item.Key / 2 && po.Operation == SecretSharingBenchmarkReport.OperationType.SecretReconstruction);
                            var printImroves = true;
                            var pdfreport    = new PDFGenerator();
                            pdfreport.GenAggreagativeBenchmarkDoc("reconstruct-aggregative-" + item.Key + "bit.pdf", item.Key / 2, printImroves, compreport == null || compreport.Count() == 0 ? null : compreport);
                        }
                    }
                }
                Console.WriteLine("Report files are generated in current path... Old files has been replaced.");
            }
            else if (op == "report-benaloh")
            {
                if (args.Length == 1 || string.IsNullOrEmpty(args[1]) || !File.Exists(args[1]))
                {
                    printHelp();
                    return;
                }
                filePath = args[1];
                var outputPath = args[2].Replace("output=", "");
                var type       = args[3];
                if (string.IsNullOrEmpty(type) || (type != "scheme" && type != "share"))
                {
                    throw new Exception("scheme or share please define");
                }

                var ser = new XMLSerializer <BenalohPersistanceReport>();
                //var filePath = "SerializedReports-n100-k60-iterate100.xml";
                var report = ser.Deserialize(filePath);
                if (type == "share")
                {
                    HandleBenalohReport(report, outputPath, type);
                }
                else
                {
                    HandleReportsGenericBenaloh(report, outputPath);
                }
                Console.WriteLine("Report files are generated in current path... Old files has been replaced.");
            }
            else if (op == "merge")
            {
                var ser = new XMLSerializer <PersistanceReport>();
                PersistanceReport mergedReports = new PersistanceReport();
                mergedReports.Reports = new List <SecretSharingBenchmarkReport>();
                var outputPath = "";
                foreach (var file in args)
                {
                    if (file == "merge")
                    {
                        continue;
                    }
                    if (file.Contains("output="))
                    {
                        outputPath = file.Replace("output=", "");
                        continue;
                    }
                    var report = ser.Deserialize(file);
                    mergedReports.Reports.AddRange(report.Reports.ToList());
                    mergedReports.Step    = report.Step;
                    mergedReports.Iterate = report.Iterate;
                }
                if (!string.IsNullOrEmpty(outputPath))
                {
                    ser.Serialize(mergedReports, outputPath);
                    Console.WriteLine("mergerd file suceffully geenrated {0}", outputPath);
                }
            }
            Console.ReadLine();
        }