2019-11-20 03:05:33 +01:00
|
|
|
|
using System;
|
|
|
|
|
using LibHac.Crypto;
|
2019-11-09 08:32:13 +01:00
|
|
|
|
using Xunit;
|
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
namespace LibHac.Tests.CryptoTests;
|
|
|
|
|
|
|
|
|
|
internal static class Common
|
2019-11-09 08:32:13 +01:00
|
|
|
|
{
|
2021-11-14 20:08:57 +01:00
|
|
|
|
internal delegate ICipher CipherCreator(byte[] key, byte[] iv);
|
2021-07-14 08:53:33 +02:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
internal static void CipherTestCore(byte[] inputData, byte[] expected, ICipher cipher)
|
|
|
|
|
{
|
|
|
|
|
byte[] transformBuffer = new byte[inputData.Length];
|
|
|
|
|
Buffer.BlockCopy(inputData, 0, transformBuffer, 0, inputData.Length);
|
2019-11-09 08:32:13 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
cipher.Transform(transformBuffer, transformBuffer);
|
2019-11-09 08:32:13 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Equal(expected, transformBuffer);
|
|
|
|
|
}
|
2019-11-25 21:11:40 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
internal static void EncryptCipherTest(EncryptionTestVector[] testVectors, CipherCreator cipherGenerator)
|
|
|
|
|
{
|
|
|
|
|
foreach (EncryptionTestVector tv in testVectors)
|
2021-07-14 08:53:33 +02:00
|
|
|
|
{
|
2021-11-14 20:08:57 +01:00
|
|
|
|
CipherTestCore(tv.PlainText, tv.CipherText, cipherGenerator(tv.Key, tv.Iv));
|
2021-07-14 08:53:33 +02:00
|
|
|
|
}
|
2021-11-14 20:08:57 +01:00
|
|
|
|
}
|
2021-07-14 08:53:33 +02:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
internal static void DecryptCipherTest(EncryptionTestVector[] testVectors, CipherCreator cipherGenerator)
|
|
|
|
|
{
|
|
|
|
|
foreach (EncryptionTestVector tv in testVectors)
|
2019-11-25 21:11:40 +01:00
|
|
|
|
{
|
2021-11-14 20:08:57 +01:00
|
|
|
|
CipherTestCore(tv.CipherText, tv.PlainText, cipherGenerator(tv.Key, tv.Iv));
|
2021-07-14 08:53:33 +02:00
|
|
|
|
}
|
2021-11-14 20:08:57 +01:00
|
|
|
|
}
|
2019-11-25 21:11:40 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
internal static void HashTestCore(ReadOnlySpan<byte> message, byte[] expectedDigest, IHash hash)
|
|
|
|
|
{
|
|
|
|
|
byte[] digestBuffer = new byte[Sha256.DigestSize];
|
2019-11-25 21:11:40 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
hash.Initialize();
|
|
|
|
|
hash.Update(message);
|
|
|
|
|
hash.GetHash(digestBuffer);
|
2019-11-25 21:11:40 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Equal(expectedDigest, digestBuffer);
|
2019-11-09 08:32:13 +01:00
|
|
|
|
}
|
|
|
|
|
}
|