public void Create_Message_Encrypt_Decrypt_Verify() { // Arrange: var repository = new RequestRepository(); var request = CryptoKey.CreateRequest(DateTime.Now); var keys = AsymmetricCryptoProvider.GenerateKeys(); var crypto = new AsymmetricCryptoProvider(); const string message = "secret message"; string encryptedPassword; string hash; string encryptedMessage = crypto.EncryptMessageWithKey(message, keys.PublicKey, out encryptedPassword, out hash); request.Messages.Add(new Message { MessageData = encryptedMessage, EncryptionKey = encryptedPassword, MessageHash = hash }); // Act: repository.AddRequest(request); var retrieved = repository.GetRequest(request.KeyToken); var retrievedMessage = retrieved.Messages.First(); string messageDecryptionKey; var decryptedMessage = crypto.DecryptMessageWithKey(keys.PrivateKey, retrievedMessage.MessageData, retrievedMessage.EncryptionKey, retrievedMessage.MessageHash, out messageDecryptionKey); // Assert: Assert.AreEqual(message, decryptedMessage); }
public void Message_Encrypt_Decrypt_ReturnsOriginalValue() { // Arrange var crypto = new AsymmetricCryptoProvider(); var key = AsymmetricCryptoProvider.GenerateKeys(); string hash; string encryptedPassword; // Act var encryptedMessage = crypto.EncryptMessageWithKey(secret, key.PublicKey, out encryptedPassword, out hash); string messageDecryptionKey; var decryptedSecret = crypto.DecryptMessageWithKey(key.PrivateKey, encryptedMessage, encryptedPassword, hash, out messageDecryptionKey); // Assert Assert.AreEqual(secret, decryptedSecret); Assert.AreEqual(SymmetricCryptoProvider.GetSecureHashForString(secret), hash, "hashes do not match"); }
private static void AttachDataToKey(string token, string compressedMessage, bool isFile, string encryptionKey = null) { string hash = null; string encryptedPassword; var db = new CryptAByteContext(); var request = db.Keys.SingleOrDefault(key => key.KeyToken == token); string encryptedMessage; if (string.IsNullOrWhiteSpace(encryptionKey)) { var crypto = new AsymmetricCryptoProvider(); encryptedMessage = crypto.EncryptMessageWithKey(compressedMessage, request.PublicKey, out encryptedPassword, out hash); } else { encryptedMessage = compressedMessage; encryptedPassword = encryptionKey; } if (request.Messages == null) { request.Messages = new Collection <Message>(); } request.Messages.Add(new Message() { MessageData = encryptedMessage, EncryptionKey = encryptedPassword, MessageHash = hash, Created = DateTime.Now, IsFile = isFile }); db.SaveChanges(); }