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); }
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); }
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); }