Documentation

This commit is contained in:
Jordan Wages 2024-09-04 19:31:43 -05:00
commit b0ebf43ae9
218 changed files with 1127 additions and 579 deletions

View file

@ -0,0 +1,112 @@
using CapyKit;
using CapyKit.Helpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
namespace Tests.Helpers
{
[TestFixture]
internal class SecurityHelperTests
{
private const string Password = "TestPassword";
private static readonly byte[] Salt = SecurityHelper.GetSalt();
[Test]
public void CompareHashedPassword_WithSamePassword_ShouldReturnTrue()
{
var existingPassword = SecurityHelper.Pbkdf2(Password, Salt);
var result = SecurityHelper.CompareHashedPassword<Pbkdf2Algorithm>(existingPassword, Password, Salt);
Assert.IsTrue(result);
}
[Test]
public void CompareHashedPassword_WithDifferentPassword_ShouldReturnFalse()
{
var existingPassword = SecurityHelper.Pbkdf2(Password, Salt);
var result = SecurityHelper.CompareHashedPassword<Pbkdf2Algorithm>(existingPassword, "WrongPassword", Salt);
Assert.IsFalse(result);
}
[Test]
public void CompareSessionID_WithSameSessionIDs_ShouldReturnTrue()
{
var sessionID1 = "SessionID";
var sessionID2 = "SessionID";
var result = SecurityHelper.CompareSessionID(sessionID1, sessionID2);
Assert.IsTrue(result);
}
[Test]
public void CompareSessionID_WithDifferentSessionIDs_ShouldReturnFalse()
{
var sessionID1 = "SessionID1";
var sessionID2 = "SessionID2";
var result = SecurityHelper.CompareSessionID(sessionID1, sessionID2);
Assert.IsFalse(result);
}
[Test]
public void GetRandomString_ShouldReturnStringOfGivenLength()
{
int length = 10;
var randomString = SecurityHelper.GetRandomString(length);
Assert.AreEqual(length, randomString.Length);
}
[Test]
public void GetRandomPassword_ShouldReturnStringOfGivenLength()
{
int length = 12;
var randomPassword = SecurityHelper.GetRandomPassword(length);
Assert.AreEqual(length, randomPassword.Length);
}
[Test]
public void Pbkdf2_WithSamePasswordAndSalt_ShouldReturnSameHash()
{
var password1 = SecurityHelper.Pbkdf2(Password, Salt);
var password2 = SecurityHelper.Pbkdf2(Password, Salt);
Assert.AreEqual(password1.Hash, password2.Hash);
}
//[Test]
//public void GetPassword_WithPBKDF2Algorithm_ShouldReturnValidPasswordObject()
//{
// var password = SecurityHelper.GetPassword<Pbkdf2Algorithm>(Password, Salt);
// Assert.IsNotNull(password);
// Assert.AreEqual(Password, password.);
//}
//[Test]
//public void GetPassword_WithDifferentAlgorithm_ShouldReturnDifferentHashes()
//{
// var password1 = SecurityHelper.GetPassword<Pbkdf2Algorithm>(Password, Salt);
// var password2 = SecurityHelper.GetPassword<SomeOtherAlgorithm>(Password, Salt); // Replace with another algorithm implementation
// Assert.AreNotEqual(password1.Hash, password2.Hash);
//}
//[Test]
//public void GetRandomBytes_ShouldReturnArrayOfGivenLength()
//{
// int length = 16;
// var bytes = SecurityHelper.GetRandomBytes(length);
// Assert.AreEqual(length, bytes.Length);
//}
}
}

124
Tests/PasswordTests.cs Normal file
View file

@ -0,0 +1,124 @@
using CapyKit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tests
{
[TestFixture]
internal class PasswordTests
{
private static byte[] GenerateSalt(int size = 16)
{
var salt = new byte[size];
using (var rng = new System.Security.Cryptography.RNGCryptoServiceProvider())
{
rng.GetBytes(salt);
}
return salt;
}
[Test]
public void PasswordCreation_WithPbkdf2Algorithm_CreatesValidHash()
{
// Arrange
var passwordText = "mySecurePassword";
var salt = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
// Act
var password = new Password(passwordText, salt, algorithm);
// Assert
Assert.IsNotNull(password.Hash);
Assert.IsNotEmpty(password.Hash);
Assert.AreEqual(salt, password.Salt);
Assert.AreEqual(algorithm, password.Algorithm);
}
[Test]
public void PasswordEquality_SamePasswordAndSalt_AreEqual()
{
// Arrange
var passwordText = "mySecurePassword";
var salt = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
var password1 = new Password(passwordText, salt, algorithm);
var password2 = new Password(passwordText, salt, algorithm);
// Act & Assert
Assert.AreEqual(password1, password2);
Assert.IsTrue(password1 == password2);
}
[Test]
public void PasswordEquality_DifferentPasswords_AreNotEqual()
{
// Arrange
var salt = GenerateSalt();
var algorithm = new Pbkdf2Algorithm();
var password1 = new Password("passwordOne", salt, algorithm);
var password2 = new Password("passwordTwo", salt, algorithm);
// Act & Assert
Assert.AreNotEqual(password1, password2);
Assert.IsTrue(password1 != password2);
}
[Test]
public void PasswordEquality_DifferentSalts_AreNotEqual()
{
// Arrange
var passwordText = "mySecurePassword";
var salt1 = GenerateSalt();
var salt2 = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
var password1 = new Password(passwordText, salt1, algorithm);
var password2 = new Password(passwordText, salt2, algorithm);
// Act & Assert
Assert.AreNotEqual(password1, password2);
Assert.IsTrue(password1 != password2);
}
[Test]
public void ToString_ReturnsCorrectFormat()
{
// Arrange
var passwordText = "mySecurePassword";
var salt = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
var password = new Password(passwordText, salt, algorithm);
// Act
var result = password.ToString();
// Assert
Assert.IsTrue(result.Contains("Hash:"));
Assert.IsTrue(result.Contains("Salt:"));
Assert.IsTrue(result.Contains("Algorithm: Pbkdf2"));
}
[Test]
public void PasswordCreation_WithInvalidSalt_ReturnsEmptyHash()
{
// Arrange
var passwordText = "mySecurePassword";
byte[] invalidSalt = null; // Invalid salt
var algorithm = new Pbkdf2Algorithm();
// Act
var password = new Password(passwordText, invalidSalt, algorithm);
// Assert
Assert.IsNotNull(password.Hash);
Assert.IsEmpty(password.Hash);
}
}
}

View file

@ -1,127 +0,0 @@
using CapyKit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tests
{
internal class Passwords
{
[TestFixture]
public class PasswordTests
{
private static byte[] GenerateSalt(int size = 16)
{
var salt = new byte[size];
using (var rng = new System.Security.Cryptography.RNGCryptoServiceProvider())
{
rng.GetBytes(salt);
}
return salt;
}
[Test]
public void PasswordCreation_WithPbkdf2Algorithm_CreatesValidHash()
{
// Arrange
var passwordText = "mySecurePassword";
var salt = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
// Act
var password = new Password(passwordText, salt, algorithm);
// Assert
Assert.IsNotNull(password.Hash);
Assert.IsNotEmpty(password.Hash);
Assert.AreEqual(salt, password.Salt);
Assert.AreEqual(algorithm, password.Algorithm);
}
[Test]
public void PasswordEquality_SamePasswordAndSalt_AreEqual()
{
// Arrange
var passwordText = "mySecurePassword";
var salt = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
var password1 = new Password(passwordText, salt, algorithm);
var password2 = new Password(passwordText, salt, algorithm);
// Act & Assert
Assert.AreEqual(password1, password2);
Assert.IsTrue(password1 == password2);
}
[Test]
public void PasswordEquality_DifferentPasswords_AreNotEqual()
{
// Arrange
var salt = GenerateSalt();
var algorithm = new Pbkdf2Algorithm();
var password1 = new Password("passwordOne", salt, algorithm);
var password2 = new Password("passwordTwo", salt, algorithm);
// Act & Assert
Assert.AreNotEqual(password1, password2);
Assert.IsTrue(password1 != password2);
}
[Test]
public void PasswordEquality_DifferentSalts_AreNotEqual()
{
// Arrange
var passwordText = "mySecurePassword";
var salt1 = GenerateSalt();
var salt2 = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
var password1 = new Password(passwordText, salt1, algorithm);
var password2 = new Password(passwordText, salt2, algorithm);
// Act & Assert
Assert.AreNotEqual(password1, password2);
Assert.IsTrue(password1 != password2);
}
[Test]
public void ToString_ReturnsCorrectFormat()
{
// Arrange
var passwordText = "mySecurePassword";
var salt = GenerateSalt();
var algorithm = Password.Pbkdf2Algorithm;
var password = new Password(passwordText, salt, algorithm);
// Act
var result = password.ToString();
// Assert
Assert.IsTrue(result.Contains("Hash:"));
Assert.IsTrue(result.Contains("Salt:"));
Assert.IsTrue(result.Contains("Algorithm: Pbkdf2"));
}
[Test]
public void PasswordCreation_WithInvalidSalt_ReturnsEmptyHash()
{
// Arrange
var passwordText = "mySecurePassword";
byte[] invalidSalt = null; // Invalid salt
var algorithm = new Pbkdf2Algorithm();
// Act
var password = new Password(passwordText, invalidSalt, algorithm);
// Assert
Assert.IsNotNull(password.Hash);
Assert.IsEmpty(password.Hash);
}
}
}
}

View file

@ -10,7 +10,7 @@ using NUnit.Framework;
namespace Tests
{
[TestFixture]
internal class StringExtensions
internal class StringExtensionTests
{
private const string Replacement = "Replaced";

View file

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>