< 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: 36_15743069263
Line coverage
91%
Covered lines: 54
Uncovered lines: 5
Coverable lines: 59
Total lines: 132
Line coverage: 91.5%
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%11100%
AeadXChaCha20Poly1305IetfDecrypt(...)100%11100%
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    {
 4359612        _ = LibsodiumWrapper.crypto_hash_sha256_init(state);
 4359613    }
 14
 15    public void Sha256Update(IntPtr state, ReadOnlySpan<byte> data)
 16    {
 4190017        _ = LibsodiumWrapper.crypto_hash_sha256_update(state, ref MemoryMarshal.GetReference(data), (ulong)data.Length);
 4190018    }
 19
 20    public void Sha256Final(IntPtr state, Span<byte> result)
 21    {
 4069822        _ = LibsodiumWrapper.crypto_hash_sha256_final(state, ref MemoryMarshal.GetReference(result));
 4069823    }
 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    {
 407629        return LibsodiumWrapper.crypto_aead_chacha20poly1305_ietf_encrypt(
 407630            ref MemoryMarshal.GetReference(cipher),
 407631            out cipherLength,
 407632            ref MemoryMarshal.GetReference(message),
 407633            message.Length,
 407634            ref MemoryMarshal.GetReference(authenticationData),
 407635            authenticationData.Length,
 407636            IntPtr.Zero,
 407637            ref MemoryMarshal.GetReference(publicNonce),
 407638            ref MemoryMarshal.GetReference(key)
 407639        );
 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    {
 407247        return LibsodiumWrapper.crypto_aead_chacha20poly1305_ietf_decrypt(
 407248            ref MemoryMarshal.GetReference(clearTextMessage),
 407249            out messageLength,
 407250            IntPtr.Zero,
 407251            ref MemoryMarshal.GetReference(cipher),
 407252            cipher.Length,
 407253            ref MemoryMarshal.GetReference(authenticationData),
 407254            authenticationData.Length,
 407255            ref MemoryMarshal.GetReference(publicNonce),
 407256            ref MemoryMarshal.GetReference(key)
 407257        );
 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    {
 264        return LibsodiumWrapper
 265            .crypto_aead_xchacha20poly1305_ietf_encrypt(ref MemoryMarshal.GetReference(cipherText),
 266                                                        out cipherTextLength, ref MemoryMarshal.GetReference(plainText),
 267                                                        plainText.Length,
 268                                                        ref MemoryMarshal.GetReference(additionalData),
 269                                                        additionalData.Length, IntPtr.Zero,
 270                                                        ref MemoryMarshal.GetReference(nonce),
 271                                                        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    {
 278        return LibsodiumWrapper
 279            .crypto_aead_xchacha20poly1305_ietf_decrypt(ref MemoryMarshal.GetReference(plainText),
 280                                                        out plainTextLength, IntPtr.Zero,
 281                                                        ref MemoryMarshal.GetReference(cipherText),
 282                                                        cipherText.Length,
 283                                                        ref MemoryMarshal.GetReference(additionalData),
 284                                                        additionalData.Length,
 285                                                        ref MemoryMarshal.GetReference(nonce),
 286                                                        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    {
 3336104        return LibsodiumWrapper.sodium_malloc(size);
 105    }
 106
 107    public int MemoryLock(IntPtr addr, ulong len)
 108    {
 438109        return LibsodiumWrapper.sodium_mlock(addr, len);
 110    }
 111
 112    public void MemoryFree(IntPtr ptr)
 113    {
 3334114        LibsodiumWrapper.sodium_free(ptr);
 3334115    }
 116
 117    public void MemoryZero(IntPtr ptr, ulong len)
 118    {
 7862119        LibsodiumWrapper.sodium_memzero(ptr, len);
 7862120    }
 121
 122    public void MemoryUnlock(IntPtr addr, ulong len)
 123    {
 438124        LibsodiumWrapper.sodium_munlock(addr, len);
 438125    }
 126
 127    public void Dispose()
 128    {
 129        // There are no managed resources to free
 3212130    }
 131}
 132#endif