Пример #1
0
        public Task <byte[]> DecryptBytesAsync(byte[] message, byte[] key)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            ElGamalKey elGamalKey;

            if (!ElGamalKey.TryParseBytes(key, out elGamalKey))
            {
                throw new ArgumentException($"{nameof(key)} has invalid format");
            }

            var decryptor = new ElGamalDecryptor(elGamalKey);

            return(Task.FromResult(decryptor.ProcessData(message)));
        }
Пример #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);
        }