< Summary - Combined Code Coverage

Information
Class: NLightning.Daemon.Helpers.AesGcmHelper
Assembly: NLightning.Daemon
File(s): /home/runner/work/NLightning/NLightning/src/NLightning.Daemon/Helpers/AesGcmHelper.cs
Tag: 57_24045730253
Line coverage
0%
Covered lines: 0
Uncovered lines: 20
Coverable lines: 20
Total lines: 44
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
DeriveKey(...)100%210%
Encrypt(...)100%210%
Decrypt(...)100%210%

File(s)

/home/runner/work/NLightning/NLightning/src/NLightning.Daemon/Helpers/AesGcmHelper.cs

#LineLine coverage
 1using System.Security.Cryptography;
 2
 3namespace NLightning.Daemon.Helpers;
 4
 5public static class AesGcmHelper
 6{
 7    private const int AesGcmTagSize = 16;
 8
 9    private static byte[] DeriveKey(string password, byte[] salt)
 10    {
 011        return Rfc2898DeriveBytes.Pbkdf2(password, salt, 100_000, HashAlgorithmName.SHA256, 32);
 12    }
 13
 14    public static byte[] Encrypt(byte[] plaintext, string password)
 15    {
 016        var salt = RandomNumberGenerator.GetBytes(AesGcmTagSize);
 017        var key = DeriveKey(password, salt);
 018        var nonce = RandomNumberGenerator.GetBytes(12);
 019        var tag = new byte[AesGcmTagSize];
 020        var ciphertext = new byte[plaintext.Length];
 21
 022        using (var aes = new AesGcm(key, AesGcmTagSize))
 23        {
 024            aes.Encrypt(nonce, plaintext, ciphertext, tag);
 025        }
 26
 027        return salt.Concat(nonce).Concat(tag).Concat(ciphertext).ToArray();
 28    }
 29
 30    public static byte[] Decrypt(byte[] encrypted, string password)
 31    {
 032        var salt = encrypted.AsSpan(0, AesGcmTagSize).ToArray();
 033        var nonce = encrypted.AsSpan(AesGcmTagSize, 12).ToArray();
 034        var tag = encrypted.AsSpan(28, AesGcmTagSize).ToArray();
 035        var ciphertext = encrypted.AsSpan(44).ToArray();
 036        var key = DeriveKey(password, salt);
 037        var plaintext = new byte[ciphertext.Length];
 38
 039        using var aes = new AesGcm(key, AesGcmTagSize);
 040        aes.Decrypt(nonce, ciphertext, tag, plaintext);
 41
 042        return plaintext;
 043    }
 44}