Exemple #1
0
        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);
            }
        }
Exemple #3
0
 public void CreateVerifySignatureUnsupported()
 {
     Assert.Throws <ArgumentException>(() => AsymmetricCryptoUtil.CreateSignature(TestString, DesPrivateKeyPem));
     Assert.Throws <ArgumentException>(() => AsymmetricCryptoUtil.VerifySignature(TestString, "", DesPublicKeyPem));
 }