private void ValidateInput(object sender, TextChangedEventArgs e)
        {
            errorText.Text     = "";
            buttonOK.IsEnabled = true;

            BigInteger newMod, newR;
            VectorND   newPrivateKey;

            try
            {
                newPrivateKey = Util.ConvertStringToVectorND(privateKey.Text);
            }
            catch (Exception)
            {
                errorText.Text     = Languages.errorWrongVectorFormat;
                buttonOK.IsEnabled = false;
                return;
            }
            if (!MerkleHellmanModel.IsSuperincreasingSequence(newPrivateKey.values))
            {
                errorText.Text     = Languages.errorPrivateKeyNotSuperincreasing;
                buttonOK.IsEnabled = false;
                return;
            }
            if (!BigInteger.TryParse(mod.Text, out newMod))
            {
                errorText.Text     = Languages.errorOnlyIntegersAllowed;
                buttonOK.IsEnabled = false;
                return;
            }
            if (newMod < newPrivateKey.values.Aggregate <BigInteger, BigInteger>(0, (current, value) => current + value))
            {
                errorText.Text     = Languages.errorModBiggerSum;
                buttonOK.IsEnabled = false;
                return;
            }
            if (!BigInteger.TryParse(r.Text, out newR))
            {
                errorText.Text     = Languages.errorOnlyIntegersAllowed;
                buttonOK.IsEnabled = false;
                return;
            }
            if (MerkleHellmanModel.Euclid(newR, newMod) != 1)
            {
                errorText.Text     = Languages.errorEuclidModR;
                buttonOK.IsEnabled = false;
                return;
            }
            if (cryptoGrid.Children.Cast <Control>().Any(control => control is TextBox && ((TextBox)control).Text.Equals("")))
            {
                errorText.Text     = Languages.errorNoCryotosystemEntered;
                buttonOK.IsEnabled = false;
                return;
            }

            merkleHellman = new MerkleHellmanModel(newPrivateKey, newR, newMod);
        }
Esempio n. 2
0
        public void SetCryptosystemManually(MerkleHellmanModel newMerkleHellman)
        {
            MerkleHellman = newMerkleHellman;

            WriteHistoryForNewCryptosystem(Languages.buttonDefineNewCryptosystem);

            NotifyPropertyChanged("MerkleHellman");
            NotifyPropertyChanged("PrivateKey");
            NotifyPropertyChanged("PublicKey");
            NotifyPropertyChanged("Mod");
            NotifyPropertyChanged("R");
            NotifyPropertyChanged("RI");
        }
Esempio n. 3
0
        public void GenerateNewMerkleHellman(int dim)
        {
            UiServices.SetBusyState();
            MerkleHellman = new MerkleHellmanModel(dim);

            WriteHistoryForNewCryptosystem(Languages.buttonGenerateNewLattice);

            NotifyPropertyChanged("MerkleHellman");
            NotifyPropertyChanged("PrivateKey");
            NotifyPropertyChanged("PublicKey");
            NotifyPropertyChanged("Mod");
            NotifyPropertyChanged("R");
            NotifyPropertyChanged("RI");
        }
Esempio n. 4
0
        public void MerkleHellmanTest()
        {
            //Example taken from:
            //http://en.wikipedia.org/wiki/Merkle%E2%80%93Hellman_knapsack_cryptosystem

            VectorND           privateKey    = new VectorND(new BigInteger[] { 2, 7, 11, 21, 42, 89, 180, 354 });
            MerkleHellmanModel merkleHellman = new MerkleHellmanModel(privateKey, 588, 881);

            //Cryptosystem correct?
            VectorND publicKey = new VectorND(new BigInteger[] { 295, 592, 301, 14, 28, 353, 120, 236 });

            Assert.AreEqual(publicKey.ToString(), merkleHellman.publicKey.ToString());
            BigInteger rI = 442;

            Assert.AreEqual(rI, merkleHellman.rI);

            //Encryption and decryption correct?
            string   message        = "a";
            VectorND cipher         = merkleHellman.Encrypt(message);
            VectorND expectedCipher = new VectorND(new BigInteger[] { 1129 });

            Assert.AreEqual(cipher.ToString(), expectedCipher.ToString());
            string decryptedMessage = merkleHellman.Decrypt(cipher);

            Assert.AreEqual(message, decryptedMessage);

            //Cryptoanalysis correct?
            string cryptanalysedMessage = merkleHellman.Cryptanalysis(cipher, null);

            Assert.AreEqual(message, cryptanalysedMessage);

            //More Testing
            for (int i = 0; i < 1000; i++)
            {
                message          = GenerateMessage(1, 100);
                cipher           = merkleHellman.Encrypt(message);
                decryptedMessage = merkleHellman.Decrypt(cipher);
                Assert.AreEqual(message, decryptedMessage);
            }
        }
 public MerkleHellmanViewManualInputView(MerkleHellmanModel currentMerkleHellman)
 {
     InitializeComponent();
     merkleHellman = currentMerkleHellman;
     InitGui();
 }