public void ProtectedKey_ProtectKeyWithSpecificLength() { var originalKey = KeyGeneration.GenerateRandomKey(20); var originalCopy = new byte[32]; Array.Copy(originalKey, originalCopy, 20); ProtectedMemory.Protect(originalCopy, MemoryProtectionScope.SameProcess); CollectionAssert.AreNotEqual(originalKey, originalCopy); var pk = InMemoryKey.CreateProtectedKeyFromPreProtectedMemory(originalCopy, 20, MemoryProtectionScope.SameProcess); CollectionAssert.AreEqual(originalKey, pk.GetCopyOfKey(), "The unprotected plain key and the original key don't match"); }
public void ProtectedKey_ProtectKey_SameLogon() { var originalKey = KeyGeneration.GenerateRandomKey(16); var originalCopy = new byte[16]; Array.Copy(originalKey, originalCopy, 16); CollectionAssert.AreEqual(originalKey, originalCopy); ProtectedMemory.Protect(originalCopy, MemoryProtectionScope.SameLogon); CollectionAssert.AreNotEqual(originalKey, originalCopy); var pk = InMemoryKey.CreateProtectedKeyFromPreProtectedMemory(originalCopy, 16, MemoryProtectionScope.SameLogon); CollectionAssert.AreEqual(originalKey, pk.GetCopyOfKey()); }
public void ProtectedKey_MultipleUse() { var originalKey = KeyGeneration.GenerateRandomKey(16); var originalCopy = new byte[16]; Array.Copy(originalKey, originalCopy, 16); CollectionAssert.AreEqual(originalKey, originalCopy); ProtectedMemory.Protect(originalCopy, MemoryProtectionScope.SameProcess); CollectionAssert.AreNotEqual(originalKey, originalCopy); var pk = InMemoryKey.CreateProtectedKeyFromPreProtectedMemory(originalCopy, 16, MemoryProtectionScope.SameProcess); // The key is protected and un-protected several times. // Make sure that the key can be used multiple times. for (int i = 0; i < 10; i++) { CollectionAssert.AreEqual(originalKey, pk.GetCopyOfKey()); } }
public void ProtectedKey_ProtectKeyNull() { new Action(() => InMemoryKey.CreateProtectedKeyFromPreProtectedMemory(null, 16, MemoryProtectionScope.SameProcess)) .ShouldThrow <ArgumentNullException>() .WithMessage("Value cannot be null.\r\nParameter name: preProtectedKey"); }
public void ProtectedKey_ProtectKeyZeroLength() { new Action(() => InMemoryKey.CreateProtectedKeyFromPreProtectedMemory(OtpCalculationTests.RfcTestKey, 0, MemoryProtectionScope.SameProcess)) .ShouldThrow <ArgumentException>() .WithMessage("The key must not be empty"); }
public void ProtectedKey_ProtectKeyEmpty() { new Action(() => InMemoryKey.CreateProtectedKeyFromPreProtectedMemory(new byte[] { }, 16, MemoryProtectionScope.SameProcess)) .ShouldThrow <ArgumentException>() .WithMessage("The key must not be empty"); }