Skip to content

Instantly share code, notes, and snippets.

@0xbrock
Forked from jonfazzaro/Encrypted.cs
Created September 27, 2016 16:23
Show Gist options
  • Save 0xbrock/fbdf22aaa8633381e43f3193d6226776 to your computer and use it in GitHub Desktop.
Save 0xbrock/fbdf22aaa8633381e43f3193d6226776 to your computer and use it in GitHub Desktop.
The missing front door code for https://github.com/sdrapkin/SecurityDriven.Inferno.
public class Encrypted {
public string Value { get; set; }
public string Salt { get; set; }
}
public interface IEncryptionConfiguration {
string MasterKey { get; }
int SaltSizeInBytes { get; }
}
public interface IEncryptionProvider {
Encrypted Encrypt(string content);
string Decrypt(Encrypted content);
}
using SecurityDriven.Inferno;
using System;
public class InfernoEncryptionProvider : IEncryptionProvider {
readonly IEncryptionConfiguration _configuration;
public InfernoEncryptionProvider(IEncryptionConfiguration configuration) {
_configuration = configuration;
}
public string Decrypt(Encrypted encrypted) {
if (encrypted == null)
return null;
byte[] clearBytes = Decrypt(
Convert.FromBase64String(encrypted.Value).AsArraySegment(),
Convert.FromBase64String(encrypted.Salt).AsArraySegment());
return Utils.SafeUTF8.GetString(clearBytes);
}
public Encrypted Encrypt(string clearText) {
if (string.IsNullOrWhiteSpace(clearText))
return null;
var saltBytes = GenerateSalt();
var cipherBytes = Encrypt(clearText, saltBytes);
return new Encrypted {
Value = Convert.ToBase64String(cipherBytes),
Salt = Convert.ToBase64String(saltBytes)
};
}
private byte[] GenerateSalt() {
return new CryptoRandom().NextBytes(_configuration.SaltSizeInBytes);
}
private byte[] Decrypt(ArraySegment<byte> cipher, ArraySegment<byte> salt) {
return EtM_CBC.Decrypt(_configuration.MasterKey.ToBytes(),
cipher, salt);
}
private byte[] Encrypt(string clearText, byte[] salt) {
return EtM_CBC.Encrypt(_configuration.MasterKey.ToBytes(),
Encoding.UTF8.GetBytes(clearText).AsArraySegment(), salt.AsArraySegment());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment