< Summary - Combined Code Coverage

Information
Class: NLightning.Node.Helpers.AesGcmHelper
Assembly: NLightning.Node
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Node/Helpers/AesGcmHelper.cs
Tag: 36_15743069263
Line coverage
0%
Covered lines: 0
Uncovered lines: 22
Coverable lines: 22
Total lines: 45
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.Node/Helpers/AesGcmHelper.cs

#LineLine coverage
 1using System.Security.Cryptography;
 2
 3namespace NLightning.Node.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        using var kdf = new Rfc2898DeriveBytes(password, salt, 100_000, HashAlgorithmName.SHA256);
 012        return kdf.GetBytes(32);
 013    }
 14
 15    public static byte[] Encrypt(byte[] plaintext, string password)
 16    {
 017        var salt = RandomNumberGenerator.GetBytes(AesGcmTagSize);
 018        var key = DeriveKey(password, salt);
 019        var nonce = RandomNumberGenerator.GetBytes(12);
 020        var tag = new byte[AesGcmTagSize];
 021        var ciphertext = new byte[plaintext.Length];
 22
 023        using (var aes = new AesGcm(key, AesGcmTagSize))
 24        {
 025            aes.Encrypt(nonce, plaintext, ciphertext, tag);
 026        }
 27
 028        return salt.Concat(nonce).Concat(tag).Concat(ciphertext).ToArray();
 29    }
 30
 31    public static byte[] Decrypt(byte[] encrypted, string password)
 32    {
 033        var salt = encrypted.AsSpan(0, AesGcmTagSize).ToArray();
 034        var nonce = encrypted.AsSpan(AesGcmTagSize, 12).ToArray();
 035        var tag = encrypted.AsSpan(28, AesGcmTagSize).ToArray();
 036        var ciphertext = encrypted.AsSpan(44).ToArray();
 037        var key = DeriveKey(password, salt);
 038        var plaintext = new byte[ciphertext.Length];
 39
 040        using var aes = new AesGcm(key, AesGcmTagSize);
 041        aes.Decrypt(nonce, ciphertext, tag, plaintext);
 42
 043        return plaintext;
 044    }
 45}