Exemplo n.º 1
0
        public CryptoKey CreateKey(string passphrase)
        {
            CryptoKey request = CryptoKey.CreateRequestWithPassPhrase(passphrase);

            WebClient client = new WebClient();

            NameValueCollection data = new NameValueCollection()
            {
                { "PublicKey", request.PublicKey },
                { "PrivateKey", HttpUtility.HtmlEncode(request.PrivateKey) },
                { "PrivateKeyHash", HttpUtility.HtmlEncode(request.PrivateKeyHash) },
            };

            if (request.Notifications.Count > 0)
            {
                data.Add("Notifcations", request.Notifications.First().Email);
            }

            try
            {
                byte[] response = client.UploadValues(ServiceUrl, "POST", data);

                var responseText = Encoding.Default.GetString(response);

                var       jss      = new JavaScriptSerializer();
                CryptoKey resource = jss.Deserialize <CryptoKey>(responseText);
                return(resource);
            }
            catch (WebException e)
            {
                HandleWebException(e);
                return(null);
                // throw;
            }
        }
Exemplo n.º 2
0
        public void Create_Request_With_Passphrase_AttachFile_Decrypt_Verify()
        {
            // Arrange:

            string fileName = AssemblyDirectory + @"\Test.PNG";

            byte[] fileBytes = File.ReadAllBytes(fileName);

            var repository = new RequestRepository();
            var request    = CryptoKey.CreateRequestWithPassPhrase(password);

            // Act:
            repository.AddRequest(request);
            repository.AttachFileToRequest(request.KeyToken, fileBytes, fileName);
            var decryptedMessages = repository.GetDecryptedMessagesWithPassphrase(request.KeyToken, password);

            // Assert:
            Assert.IsTrue(decryptedMessages.Count > 0);

            byte[] decryptedString = Convert.FromBase64String(decryptedMessages.First().MessageData);

            var zipStream = new MemoryStream(decryptedString);

            using (ZipFile zip = ZipFile.Read(zipStream))
            {
                var files = zip.ToList();
                Assert.IsTrue(files.Count == 1);
            }
        }
Exemplo n.º 3
0
        public ActionResult Create(string passphrase = null, string publickey = null, string privatekey = null, string privatekeyhash = null, DateTime?releasedate = null)
        {
            if (string.IsNullOrWhiteSpace(passphrase) && string.IsNullOrWhiteSpace(publickey))
            {
                Response.StatusCode = 400;
                // Response.Status = "MissingPassphraseOrPublicKey";
                return(SerializeResult("Either a passphrase or a publickey parameter is required"));
            }

            if (!string.IsNullOrWhiteSpace(publickey) && string.IsNullOrWhiteSpace(privatekey))
            {
                Response.StatusCode = 400;
                return(SerializeResult("When sneding the public key, you must also send the privatekeyhash"));
            }

            CryptoKey key = !string.IsNullOrWhiteSpace(passphrase)
                                ? CryptoKey.CreateRequestWithPassPhrase(passphrase)
                                : CryptoKey.CreateRequestWithPublicKey(publickey, privatekey, true, privatekeyhash);

            if (releasedate != null)
            {
                key.ReleaseDate = (DateTime)releasedate;
            }

            requestRepository.AddRequest(key);

            return(SerializeResult(key));
        }
Exemplo n.º 4
0
        public void NotifyOnMessageReceived()
        {
            // Arrange:
            var repository = new RequestRepository();
            var request    = CryptoKey.CreateRequestWithPassPhrase(password);

            request.Notifications.Add(new Notification {
                Email = "*****@*****.**"
            });

            // Act:
            repository.AddRequest(request);
            repository.AttachMessageToRequest(request.KeyToken, message);

            //Mock<IRequestRepository> mock = new Mock<IRequestRepository>();

            //mock.Setup(m=> m.NotifyOnMessageReceived(request.KeyToken)).Verifiable("Sends notification");

            //mock.Verify(m=> m.NotifyOnMessageReceived(request.KeyToken));

            //   var decryptedMessages = repository.GetDecryptedMessagesWithPassphrase(request.KeyToken, password);

            //    var request2 = repository.GetRequest(request.KeyToken);

            // Assert:
            //   Assert.IsNull(request2);
        }
Exemplo n.º 5
0
        public void Create_Request_With_Passphrase_AttachMessage_Decrypt_Verify()
        {
            // Arrange:
            var repository = new RequestRepository();
            var request    = CryptoKey.CreateRequestWithPassPhrase(password);

            // Act:
            repository.AddRequest(request);
            repository.AttachMessageToRequest(request.KeyToken, message);

            var decryptedMessages = repository.GetDecryptedMessagesWithPassphrase(request.KeyToken, password);

            // Assert:
            Assert.IsTrue(decryptedMessages.Count > 0);
            Assert.AreEqual(message, decryptedMessages.First().MessageData);
        }
Exemplo n.º 6
0
        public void DeleteKeyFromRepository()
        {
            // Arrange:
            var repository = new RequestRepository();
            var request    = CryptoKey.CreateRequestWithPassPhrase(password);

            request.DeleteKeyAfterReading = true;

            // Act:
            repository.AddRequest(request);
            repository.DeleteKeyWithPassphrase(request.KeyToken, password);

            // Assert:

            var request2 = repository.GetRequest(request.KeyToken);

            Assert.IsNull(request2);
        }
Exemplo n.º 7
0
        public void DeleteKeyAfterReading()
        {
            // Arrange:
            var repository = new RequestRepository();
            var request    = CryptoKey.CreateRequestWithPassPhrase(password);

            request.DeleteKeyAfterReading = true;

            // Act:
            repository.AddRequest(request);
            repository.AttachMessageToRequest(request.KeyToken, message);

            var decryptedMessages = repository.GetDecryptedMessagesWithPassphrase(request.KeyToken, password);

            var request2 = repository.GetRequest(request.KeyToken);

            // Assert:
            Assert.IsNull(request2);
        }
Exemplo n.º 8
0
        public void DeleteKeyWithInvalidpasswordFromRepositoryFails()
        {
            // Arrange:
            var repository = new RequestRepository();
            var request    = CryptoKey.CreateRequestWithPassPhrase(password);

            request.DeleteKeyAfterReading = true;

            // Act:
            repository.AddRequest(request);

            // Assert:

            try
            {
                repository.DeleteKeyWithPassphrase(request.KeyToken, "");
                Assert.Fail("This should not work.");
            }
            catch (Exception)
            {
            }
        }
Exemplo n.º 9
0
        public ActionResult CreateKey(NewKeyModel newKeyModel)
        {
            if (string.IsNullOrWhiteSpace(newKeyModel.Passphrase))
            {
                ViewBag.Passphrase         =
                    newKeyModel.Passphrase = PronounceablePasswordGenerator.Generate(14);
            }
            else
            {
                ViewBag.Passphrase = "*******";
            }

            var request = CryptoKey.CreateRequestWithPassPhrase(newKeyModel.Passphrase);

            request.LockDate = newKeyModel.LockDate;
            if (newKeyModel.ReleaseDate != null)
            {
                request.ReleaseDate = (DateTime)newKeyModel.ReleaseDate;
            }
            request.DeleteKeyAfterReading      = newKeyModel.DeleteKeyAfterReading;
            request.DeleteMessagesAfterReading = newKeyModel.DeleteMessagesAfterReading;

            if (!string.IsNullOrWhiteSpace(newKeyModel.NotifyEmail))
            {
                request.Notifications.Add(new Notification()
                {
                    Email = newKeyModel.NotifyEmail
                });
            }

            if (newKeyModel.LockDate == null)
            {
                newKeyModel.LockDate = DateTime.Now.AddDays(30);
            }
            requestRepository.AddRequest(request);
            return(View("NewKeyDetails", request));
        }