public void ReadAllTest()
        {
            var voteReader = new EncryptedVoteFileReader();
            var data       = voteReader.ReadFromFile("TestData\\ballots_decrypted_2020-06-19T17_37_00.csv");

            // Проверяем факт наличия первой записи
            // "85388";52;"0xd20f7dd3bfb77b7336d262995d24939c4db6296f1226d80950c5400aaed35404";"#168941";"15:38:27";"{""message"":""341710d93b521ab992d1261262957bbbae7911ac"",""nonce"":""bff354082494b923965c10429a7d9971efee5be3090f54ca"",""public_key"":""d323c5b6bf3ffd0867f737b16a3c44e547837ebe73ca7767e15b38963b27a05d""}";"2212294583";"#172233";"17:28:37";"d20f7dd3bfb77b7336d262995d24939c4db6296f1226d80950c5400aaed354040000e90306000a403134666534633962623037336431613164393264363065626139313033353165313339643562373637643237653136646232396535303239323838366234383310341a560a14341710d93b521ab992d1261262957bbbae7911ac121a0a18bff354082494b923965c10429a7d9971efee5be3090f54ca1a220a20d323c5b6bf3ffd0867f737b16a3c44e547837ebe73ca7767e15b38963b27a05dd40cbd489eaae0b86926415d4bc4bc418df323c1e24a1c2d1fffd2a7611f10fda4347613060487f110fb265c7c13fb78600368bf66e79c313bb6476e83632801"
            var firstRecord = data.Where(x => x.VoteNumber == 85388).Single();

            Assert.AreEqual(52, firstRecord.DistrictNumber);
            Assert.AreEqual(168941, firstRecord.BlockNumber);
            // Проверяем факт наличия последней записи
            // "85197";77;"0x184f3780a667dd316df77166dda4ec3b38bf531b0ec851c3ed0c2d10589df55f";"#168693";"15:31:52";"{""message"":""79842eb491afb0ea7cc21f3ebdbce8ed75800def"",""nonce"":""795435e800c610e1645672c042e23418ed4d5af485f5e970"",""public_key"":""a8ec1ce1ed4644ec3e8e15d24e11075aa807a5c2addb1a041c1e5e610d0ea85e""}"
            var lastRecord = data.Where(x => x.VoteNumber == 85197).Single();

            Assert.AreEqual(77, lastRecord.DistrictNumber);
            Assert.AreEqual(168693, lastRecord.BlockNumber);
        }
Exemple #2
0
        private (EncryptedVoteFileReader.EncryptedVoteRecord[] encryptedVotes, ElGamalDecryptor decryptor) GetDataForValidation()
        {
            var        modulo     = "165369015881747654263169334048437027341589578831388076203669679751228103730581853004239937620390662340697170254714963999712574103938632344301147612469870940462347496583243202336840686434045187170457457390530900726932209309694946086372519269610850329270398550413793758739702497764674603008447480576049325649379";
            BigInteger p          = new BigInteger(modulo, 10);
            var        generator  = "108983589125857988887799079374111523867903227291665711778924429892396584160937414307590973620804320110833766711915181183354451775894143782144562429539439662246154120627476661161620394032143652279821376660116687871113836507709308914754296752851754595271290675931295353918333037008650334703641521924401778561481";
            BigInteger g          = new BigInteger(generator, 10);
            var        publicKey  = "95037962141997278598444295323416959687203828673622505601323330341875332219187996223109547161059313685845388548002721668698176360799317237039717937000841182698936793113519146616557801775110314932631443735725757529075168762329138239011228280320957777931011352874682630080877486558428265880823122590580770387505";
            var        privateKey = "121059313385762190379394539131175223970663702958273675041364938406427795349299390592172678615857213838053328843754657568685431221069308928897897579696879704086254410696320593023100923661192940619744327349942556208570556929626169358881256636833104492234991097614322051649000547092241681421625589582664828742232";

            BigInteger pubKey  = new BigInteger(publicKey, 10);
            BigInteger privKey = new BigInteger(privateKey, 10);

            var elGamal = new ElGamalDecryptor(p, privKey);
            EncryptedVoteFileReader readerEn = new EncryptedVoteFileReader();
            var encryptedVotes = readerEn.ReadRecordFromFile("ballots_encrypted_2019-09-08T20_30_00.csv").ToArray();

            if (encryptedVotes.Length != _votingResults.Votes.Count)
            {
                MessageBox.Show("Encrypted and decrypted votes count mismatch");
                return(null, null);
            }

            return(encryptedVotes, elGamal);
        }
Exemple #3
0
        private bool LoadEncryptedData()
        {
            var fileReader = new EncryptedVoteFileReader();

            var path         = Assembly.GetExecutingAssembly().Location;
            var dir          = System.IO.Path.GetDirectoryName(path);
            var ballotsFiles = Directory.GetFiles(dir, "ballots_encrypted_*");

            if (ballotsFiles.Length == 0)
            {
                Dispatcher.Invoke(delegate
                {
                    MessageBox.Show(this, "Please add ballots_encrypted_* file to program directory");
                });
                return(false);
            }

            var voteRecords = fileReader.ReadFromFile(ballotsFiles[ballotsFiles.Length - 1]);

            _voteDecryptorControl.LoadRecords(voteRecords);

            // время записи блока
            var blockStartGraphItems = BlockGraphBuilder.BlockStart(voteRecords, x => x.BlockNumber, x => x.Time);

            _blockTimestamp.ShowLinearIntepolatedBlockGraphItems(true, blockStartGraphItems);
            var blockTimestampInterpolator = new BlockTimestampInterpolator(blockStartGraphItems);

            _blockTimestampGridView.LoadData(blockStartGraphItems);

            // среднее время вычисления блока
            {
                var graphItems = BlockGraphBuilder.BlockTime(blockStartGraphItems);
                _averageBlockTime.ShowLinearIntepolatedBlockGraphItems(false, graphItems);
                _blockTimeGridView.LoadData(graphItems);
            }
            {
                var graphItems = BlockGraphBuilder.TransactionPerBlock(voteRecords, x => true, x => x.BlockNumber);
                // транзакций в блоках
                _transactionPerBlock.Show(graphItems);
                // транзакций в блоках по времени
                _transactionPerBlockTimeline.Show(blockTimestampInterpolator, new[] { "Votes" }, new[] { graphItems });
            }
            // транзакций в блоках по времени по районам голосования
            {
                var districts = voteRecords.Select(x => x.DistrictNumber).Distinct().ToArray();
                var graphes   = new BlockGraphItem <int> [districts.Length][];
                for (int i = 0; i < districts.Length; i++)
                {
                    graphes[i] = BlockGraphBuilder.TransactionPerBlock(voteRecords, x => x.DistrictNumber == districts[i], x => x.BlockNumber);
                }
                var names = districts.Select(x =>
                {
                    switch (x)
                    {
                    case 52:
                        return("NN");

                    case 77:
                        return("MSK");

                    default:
                        return("");
                    }
                }).ToArray();

                _transactionPerDistrictPerBlockTimeline.Show(blockTimestampInterpolator, names, graphes);
            }
            return(true);
        }