37 lines
1.1 KiB
C#
37 lines
1.1 KiB
C#
using System.Security.Cryptography;
|
|
using NUnit.Framework;
|
|
using static CSSUDII.Sodium.Interop.Libsodium;
|
|
|
|
namespace CSSUDII.Sodium.Tests;
|
|
|
|
[TestFixture]
|
|
public sealed class SecretBoxTest
|
|
{
|
|
[Test]
|
|
public unsafe void Test()
|
|
{
|
|
var message = RandomNumberGenerator.GetBytes(1024);
|
|
var cipher = RandomNumberGenerator.GetBytes((int)(1024 + crypto_secretbox_MACBYTES));
|
|
|
|
var key = stackalloc byte[(int)crypto_secretbox_KEYBYTES];
|
|
var nonce = stackalloc byte[(int)crypto_secretbox_NONCEBYTES];
|
|
|
|
crypto_secretbox_keygen(key);
|
|
randombytes_buf(nonce, crypto_secretbox_NONCEBYTES);
|
|
fixed (byte* mPtr = message)
|
|
fixed (byte* cPtr = cipher)
|
|
{
|
|
crypto_secretbox_easy(cPtr, mPtr, (ulong)message.Length, nonce, key);
|
|
}
|
|
|
|
var decrypted = new byte[message.Length];
|
|
fixed (byte* dPtr = decrypted)
|
|
fixed (byte* cPtr = cipher)
|
|
{
|
|
crypto_secretbox_open_easy(dPtr, cPtr, (ulong)cipher.Length, nonce, key);
|
|
}
|
|
|
|
Assert.That(decrypted, Is.EquivalentTo(message));
|
|
}
|
|
}
|