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; } }
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); } }
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)); }
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); }
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); }
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); }
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); }
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) { } }
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)); }