< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Crypto.Providers.Libsodium.SodiumCryptoProvider
Assembly: NLightning.Infrastructure
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure/Crypto/Providers/Libsodium/SodiumCryptoProvider.cs
Tag: 30_15166811759
Line coverage
62%
Covered lines: 37
Uncovered lines: 22
Coverable lines: 59
Total lines: 132
Line coverage: 62.7%
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
Sha256Init(...)100%11100%
Sha256Update(...)100%11100%
Sha256Final(...)100%11100%
AeadChaCha20Poly1305IetfEncrypt(...)100%11100%
AeadChaCha20Poly1305IetfDecrypt(...)100%11100%
AeadXChaCha20Poly1305IetfEncrypt(...)100%210%
AeadXChaCha20Poly1305IetfDecrypt(...)100%210%
DeriveKeyFromPasswordUsingArgon2I(...)100%210%
RandomBytes(...)100%210%
MemoryAlloc(...)100%11100%
MemoryLock(...)100%11100%
MemoryFree(...)100%11100%
MemoryZero(...)100%11100%
MemoryUnlock(...)100%11100%
Dispose()100%11100%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure/Crypto/Providers/Libsodium/SodiumCryptoProvider.cs

#LineLine coverage
 1#if CRYPTO_LIBSODIUM
 2using System.Runtime.InteropServices;
 3
 4namespace NLightning.Infrastructure.Crypto.Providers.Libsodium;
 5
 6using Interfaces;
 7
 8internal sealed class SodiumCryptoProvider : ICryptoProvider
 9{
 10    public void Sha256Init(IntPtr state)
 11    {
 4400012        _ = LibsodiumWrapper.crypto_hash_sha256_init(state);
 4400013    }
 14
 15    public void Sha256Update(IntPtr state, ReadOnlySpan<byte> data)
 16    {
 4204617        _ = LibsodiumWrapper.crypto_hash_sha256_update(state, ref MemoryMarshal.GetReference(data), (ulong)data.Length);
 4204618    }
 19
 20    public void Sha256Final(IntPtr state, Span<byte> result)
 21    {
 4083622        _ = LibsodiumWrapper.crypto_hash_sha256_final(state, ref MemoryMarshal.GetReference(result));
 4083623    }
 24
 25    public int AeadChaCha20Poly1305IetfEncrypt(ReadOnlySpan<byte> key, ReadOnlySpan<byte> publicNonce,
 26                                               ReadOnlySpan<byte> secureNonce, ReadOnlySpan<byte> authenticationData,
 27                                               ReadOnlySpan<byte> message, Span<byte> cipher, out long cipherLength)
 28    {
 407229        return LibsodiumWrapper.crypto_aead_chacha20poly1305_ietf_encrypt(
 407230            ref MemoryMarshal.GetReference(cipher),
 407231            out cipherLength,
 407232            ref MemoryMarshal.GetReference(message),
 407233            message.Length,
 407234            ref MemoryMarshal.GetReference(authenticationData),
 407235            authenticationData.Length,
 407236            IntPtr.Zero,
 407237            ref MemoryMarshal.GetReference(publicNonce),
 407238            ref MemoryMarshal.GetReference(key)
 407239        );
 40    }
 41
 42    public int AeadChaCha20Poly1305IetfDecrypt(ReadOnlySpan<byte> key, ReadOnlySpan<byte> publicNonce,
 43                                               ReadOnlySpan<byte> secureNonce, ReadOnlySpan<byte> authenticationData,
 44                                               ReadOnlySpan<byte> cipher, Span<byte> clearTextMessage,
 45                                               out long messageLength)
 46    {
 406847        return LibsodiumWrapper.crypto_aead_chacha20poly1305_ietf_decrypt(
 406848            ref MemoryMarshal.GetReference(clearTextMessage),
 406849            out messageLength,
 406850            IntPtr.Zero,
 406851            ref MemoryMarshal.GetReference(cipher),
 406852            cipher.Length,
 406853            ref MemoryMarshal.GetReference(authenticationData),
 406854            authenticationData.Length,
 406855            ref MemoryMarshal.GetReference(publicNonce),
 406856            ref MemoryMarshal.GetReference(key)
 406857        );
 58    }
 59
 60    public int AeadXChaCha20Poly1305IetfEncrypt(ReadOnlySpan<byte> key, ReadOnlySpan<byte> nonce,
 61                                                ReadOnlySpan<byte> additionalData, ReadOnlySpan<byte> plainText,
 62                                                Span<byte> cipherText, out long cipherTextLength)
 63    {
 064        return LibsodiumWrapper
 065            .crypto_aead_xchacha20poly1305_ietf_encrypt(ref MemoryMarshal.GetReference(cipherText),
 066                                                        out cipherTextLength, ref MemoryMarshal.GetReference(plainText),
 067                                                        plainText.Length,
 068                                                        ref MemoryMarshal.GetReference(additionalData),
 069                                                        additionalData.Length, IntPtr.Zero,
 070                                                        ref MemoryMarshal.GetReference(nonce),
 071                                                        ref MemoryMarshal.GetReference(key));
 72    }
 73
 74    public int AeadXChaCha20Poly1305IetfDecrypt(ReadOnlySpan<byte> key, ReadOnlySpan<byte> nonce,
 75                                                ReadOnlySpan<byte> additionalData, ReadOnlySpan<byte> cipherText,
 76                                                Span<byte> plainText, out long plainTextLength)
 77    {
 078        return LibsodiumWrapper
 079            .crypto_aead_xchacha20poly1305_ietf_decrypt(ref MemoryMarshal.GetReference(plainText),
 080                                                        out plainTextLength, IntPtr.Zero,
 081                                                        ref MemoryMarshal.GetReference(cipherText),
 082                                                        cipherText.Length,
 083                                                        ref MemoryMarshal.GetReference(additionalData),
 084                                                        additionalData.Length,
 085                                                        ref MemoryMarshal.GetReference(nonce),
 086                                                        ref MemoryMarshal.GetReference(key));
 87    }
 88
 89    public int DeriveKeyFromPasswordUsingArgon2I(Span<byte> key, string password, ReadOnlySpan<byte> salt, ulong opsLimi
 90    {
 91        const int ALG = 2; // crypto_pwhash_ALG_ARGON2ID13
 092        return LibsodiumWrapper.crypto_pwhash(ref MemoryMarshal.GetReference(key), (ulong)key.Length, password,
 093                                              (ulong)password.Length, ref MemoryMarshal.GetReference(salt), opsLimit,
 094                                              memLimit, ALG);
 95    }
 96
 97    public void RandomBytes(Span<byte> buffer)
 98    {
 099        LibsodiumWrapper.randombytes_buf(ref MemoryMarshal.GetReference(buffer), (UIntPtr)buffer.Length);
 0100    }
 101
 102    public IntPtr MemoryAlloc(ulong size)
 103    {
 3590104        return LibsodiumWrapper.sodium_malloc(size);
 105    }
 106
 107    public int MemoryLock(IntPtr addr, ulong len)
 108    {
 426109        return LibsodiumWrapper.sodium_mlock(addr, len);
 110    }
 111
 112    public void MemoryFree(IntPtr ptr)
 113    {
 3518114        LibsodiumWrapper.sodium_free(ptr);
 3518115    }
 116
 117    public void MemoryZero(IntPtr ptr, ulong len)
 118    {
 8046119        LibsodiumWrapper.sodium_memzero(ptr, len);
 8046120    }
 121
 122    public void MemoryUnlock(IntPtr addr, ulong len)
 123    {
 378124        LibsodiumWrapper.sodium_munlock(addr, len);
 378125    }
 126
 127    public void Dispose()
 128    {
 129        // There are no managed resources to free
 3460130    }
 131}
 132#endif