private bool VerifyKeyPairSignatures(string message, string privateKeyPem, string publicKeyPem) { var signature = AsymmetricCryptoUtil.CreateSignature(message, privateKeyPem); return(AsymmetricCryptoUtil.VerifySignature(message, signature, publicKeyPem)); }
private void CheckLink() { var syncInstance = Controller.GetSyncServerInstance(_serverAccountId); var messageHandler = new VerifyDeviceKeysResponseHandler( Controller.GetSyncServerInstance(_serverAccountId), _nonce); // Give the sync process a kick up the arse syncInstance.ProcessMessagesOnly(); var replyReceived = messageHandler.WaitForReply(); // Tell the sync process to go back to normal duties syncInstance.ProcessMessagesOnlyStop(); if (!replyReceived) { MessageBox.Show(@"Device verification timed out"); if (!_formClosed) { Invoke((MethodInvoker)Close); } return; } var secretShareMessage = messageHandler.Reply; if (!secretShareMessage.Verified) { MessageBox.Show(@"Device verification denied."); if (!_formClosed) { Invoke((MethodInvoker)Close); } return; } // Verify the signature against the public key we have for it. var account = Model.ServerAccounts.Get(_serverAccountId); var linkedClientCryptoKey = Model.CryptoKeys.Get(account.LinkedDeviceCryptoKeyId); var signatureVerified = AsymmetricCryptoUtil.VerifySignature( _nonce, messageHandler.Reply.NonceSigned, linkedClientCryptoKey.PublicKeyPem); if (!signatureVerified) { MessageBox.Show(@"Device verification failed."); messageHandler.MarkAsProcessed(false); if (!_formClosed) { Invoke((MethodInvoker)Close); } return; } messageHandler.MarkAsProcessed(true); Model.CryptoKeys.Update(linkedClientCryptoKey.Id, new CryptoKey { Trust = true }); Controller.UpdateHomePage(); if (!_formClosed) { Invoke((MethodInvoker)Close); } }
public void CreateVerifySignatureUnsupported() { Assert.Throws <ArgumentException>(() => AsymmetricCryptoUtil.CreateSignature(TestString, DesPrivateKeyPem)); Assert.Throws <ArgumentException>(() => AsymmetricCryptoUtil.VerifySignature(TestString, "", DesPublicKeyPem)); }