Hermod
A cross-platform, modular and fully GDPR-compliant email archival solution!
Loading...
Searching...
No Matches
JsonDatabaseConnector.Crypto.cs
Go to the documentation of this file.
1using System;
2
4 using System.Runtime.CompilerServices;
5 using System.Security.Cryptography;
6
7 partial class JsonDatabaseConnector {
8
9 private byte[] m_encKey;
10 private byte[] m_initVector;
11
17 private string DecryptString(byte[] bytes) {
18 using var aes = Aes.Create();
19
20 aes.IV = m_initVector;
21 aes.Key = m_encKey;
22
23 var decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
24
25 using var memStream = new MemoryStream(bytes);
26 using var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read);
27 using var sReader = new StreamReader(cryptoStream);
28
29 return sReader.ReadToEnd();
30 }
31
37 private async Task<string> DecryptStringAsync(byte[] bytes) {
38 using var aes = Aes.Create();
39
40 aes.IV = m_initVector;
41 aes.Key = m_encKey;
42
43 var decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
44
45 using var memStream = new MemoryStream(bytes);
46 using var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read);
47 using var sReader = new StreamReader(cryptoStream);
48
49 return await sReader.ReadToEndAsync();
50 }
51
57 private byte[] EncryptString(string plaintext) {
58 using var aes = Aes.Create();
59
60 aes.IV = m_initVector;
61 aes.Key = m_encKey;
62
63 var encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
64
65 using var memStream = new MemoryStream();
66 using var cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write);
67 using var swriter = new StreamWriter(cryptoStream);
68
69 swriter.Write(plaintext);
70
71 return memStream.ToArray();
72 }
73
79 private async Task<byte[]> EncryptStringAsync(string plaintext) {
80 using var aes = Aes.Create();
81
82 aes.IV = m_initVector;
83 aes.Key = m_encKey;
84
85 var encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
86
87 using var memStream = new MemoryStream();
88 using var cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write);
89 using var swriter = new StreamWriter(cryptoStream);
90
91 await swriter.WriteAsync(plaintext);
92
93 return memStream.ToArray();
94 }
95
101 public static void GenerateNewAesKey(out byte[] key, out byte[] initVector) {
102 using var aes = Aes.Create();
103 key = aes.Key;
104 initVector = aes.IV;
105 }
106
110 public override void Dispose() => DumpJson();
111
115 public async Task DisposeAsync() => await DumpJsonAsync();
116
117 }
118}
119
A DatabaseConnector which "connects" to an encrypted JSON file containing all domain and user informa...
async Task< byte[]> EncryptStringAsync(string plaintext)
Asynchronously encrypts a given string.
async Task< string > DecryptStringAsync(byte[] bytes)
Asynchronously decrypts a cipher text to a string.
byte[] EncryptString(string plaintext)
Encrypts a string.
string DecryptString(byte[] bytes)
Decrypts a cipher text to a string.
async Task DisposeAsync()
Asynchronously ensures all data is dumped to the JSON before the resources are freed.
static void GenerateNewAesKey(out byte[] key, out byte[] initVector)
Generates a new AES encryption key with init vector.
override void Dispose()
Ensures all data is dumped to the JSON before the resources are freed.