2017-11-03 15:48:55 +01:00
|
|
|
|
using System.Text;
|
2017-11-06 19:01:01 +01:00
|
|
|
|
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
|
2017-11-03 15:48:55 +01:00
|
|
|
|
using ModernKeePassLib.Cryptography;
|
|
|
|
|
using ModernKeePassLib.Utility;
|
|
|
|
|
|
|
|
|
|
namespace ModernKeePassLib.Test.Utility
|
|
|
|
|
{
|
2017-11-06 19:01:01 +01:00
|
|
|
|
[TestClass]
|
2017-11-03 15:48:55 +01:00
|
|
|
|
public class MemUtilTests
|
|
|
|
|
{
|
|
|
|
|
private byte[] _pb = CryptoRandom.Instance.GetRandomBytes((uint)CryptoRandom.NewWeakRandom().Next(0, 0x2FFFF));
|
|
|
|
|
|
2017-11-06 19:01:01 +01:00
|
|
|
|
[TestMethod]
|
2017-11-03 15:48:55 +01:00
|
|
|
|
public void TestGzip()
|
|
|
|
|
{
|
|
|
|
|
var pbCompressed = MemUtil.Compress(_pb);
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(MemUtil.Decompress(pbCompressed), _pb));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-11-06 19:01:01 +01:00
|
|
|
|
[TestMethod]
|
2017-11-03 15:48:55 +01:00
|
|
|
|
public void TestMemUtil()
|
|
|
|
|
{
|
|
|
|
|
Encoding enc = StrUtil.Utf8;
|
|
|
|
|
_pb = enc.GetBytes("012345678901234567890a");
|
|
|
|
|
byte[] pbN = enc.GetBytes("9012");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.AreEqual(MemUtil.IndexOf(_pb, pbN), 9);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbN = enc.GetBytes("01234567890123");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.AreEqual(MemUtil.IndexOf(_pb, pbN), 0);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbN = enc.GetBytes("a");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.AreEqual(MemUtil.IndexOf(_pb, pbN), 21);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbN = enc.GetBytes("0a");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.AreEqual(MemUtil.IndexOf(_pb, pbN), 20);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbN = enc.GetBytes("1");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.AreEqual(MemUtil.IndexOf(_pb, pbN), 1);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbN = enc.GetBytes("b");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.IndexOf(_pb, pbN) < 0);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbN = enc.GetBytes("012b");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.IndexOf(_pb, pbN) < 0);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-11-06 19:01:01 +01:00
|
|
|
|
[TestMethod]
|
2017-11-03 15:48:55 +01:00
|
|
|
|
public void TestBase32()
|
|
|
|
|
{
|
|
|
|
|
byte[] pbRes = MemUtil.ParseBase32("MY======");
|
|
|
|
|
byte[] pbExp = Encoding.UTF8.GetBytes("f");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(pbRes, pbExp));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbRes = MemUtil.ParseBase32("MZXQ====");
|
|
|
|
|
pbExp = Encoding.UTF8.GetBytes("fo");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(pbRes, pbExp));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbRes = MemUtil.ParseBase32("MZXW6===");
|
|
|
|
|
pbExp = Encoding.UTF8.GetBytes("foo");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(pbRes, pbExp));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbRes = MemUtil.ParseBase32("MZXW6YQ=");
|
|
|
|
|
pbExp = Encoding.UTF8.GetBytes("foob");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(pbRes, pbExp));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbRes = MemUtil.ParseBase32("MZXW6YTB");
|
|
|
|
|
pbExp = Encoding.UTF8.GetBytes("fooba");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(pbRes, pbExp));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbRes = MemUtil.ParseBase32("MZXW6YTBOI======");
|
|
|
|
|
pbExp = Encoding.UTF8.GetBytes("foobar");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(pbRes, pbExp));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
|
|
|
|
|
pbRes = MemUtil.ParseBase32("JNSXSIDQOJXXM2LEMVZCAYTBONSWIIDPNYQG63TFFV2GS3LFEBYGC43TO5XXEZDTFY======");
|
|
|
|
|
pbExp = Encoding.UTF8.GetBytes("Key provider based on one-time passwords.");
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.IsTrue(MemUtil.ArraysEqual(pbRes, pbExp));
|
2017-11-03 15:48:55 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-11-06 19:01:01 +01:00
|
|
|
|
[TestMethod]
|
2017-11-03 15:48:55 +01:00
|
|
|
|
public void TestMemUtil2()
|
|
|
|
|
{
|
|
|
|
|
var i = 0 - 0x10203040;
|
|
|
|
|
var pbRes = MemUtil.Int32ToBytes(i);
|
2017-11-06 19:01:01 +01:00
|
|
|
|
Assert.AreEqual(MemUtil.ByteArrayToHexString(pbRes), "C0CFDFEF");
|
|
|
|
|
Assert.AreEqual(MemUtil.BytesToUInt32(pbRes), (uint)i);
|
|
|
|
|
Assert.AreEqual(MemUtil.BytesToInt32(pbRes), i);
|
2017-11-03 15:48:55 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|