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); }
public void SetCryptosystemManually(MerkleHellmanModel newMerkleHellman) { MerkleHellman = newMerkleHellman; WriteHistoryForNewCryptosystem(Languages.buttonDefineNewCryptosystem); NotifyPropertyChanged("MerkleHellman"); NotifyPropertyChanged("PrivateKey"); NotifyPropertyChanged("PublicKey"); NotifyPropertyChanged("Mod"); NotifyPropertyChanged("R"); NotifyPropertyChanged("RI"); }
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"); }
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(); }