< Summary

Information
Class: Cff.Effect.Aes.Aes
Assembly: Cff.Effect.Aes
File(s): /home/runner/work/Cff.Effect/Cff.Effect/src/Cff.Effect.Aes/Aes.cs
Tag: 43_3213223096
Line coverage
100%
Covered lines: 17
Uncovered lines: 0
Coverable lines: 17
Total lines: 35
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Method coverage is only available for sponsors.

Upgrade to PRO version

Coverage History

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
get_AesKey()100%1100%
Encrypt(...)100%1100%
Decrypt(...)100%1100%

File(s)

/home/runner/work/Cff.Effect/Cff.Effect/src/Cff.Effect.Aes/Aes.cs

#LineLine coverage
 1using System.Security.Cryptography;
 2using System.Text;
 3using Cff.Effect.Abstractions;
 4using Cff.Effect.Abstractions.Domain;
 5
 6namespace Cff.Effect.Aes;
 7
 48internal readonly record struct Aes(AesKey AesKey) : IAes
 9{
 10    public (byte[] Body, byte[] Nonce, byte[] Tag) Encrypt(string source)
 111    {
 112        using var aes = new AesGcm(AesKey.Value);
 13
 114        var nonce = new byte[AesGcm.NonceByteSizes.MaxSize];
 115        RandomNumberGenerator.Fill(nonce);
 16
 117        var plaintextBytes = Encoding.UTF8.GetBytes(source);
 118        var body = new byte[plaintextBytes.Length];
 119        var tag = new byte[AesGcm.TagByteSizes.MaxSize];
 20
 121        aes.Encrypt(nonce, plaintextBytes, body, tag);
 22
 123        return (body, nonce, tag);
 124    }
 25
 26    public string Decrypt(byte[] body, byte[] nonce, byte[] tag)
 127    {
 128        using var aes = new AesGcm(AesKey.Value);
 129        var plaintextBytes = new byte[body.Length];
 130        aes.Decrypt(nonce, body, tag, plaintextBytes);
 31
 132        return Encoding.UTF8.GetString(plaintextBytes);
 133    }
 34}
 35