diff --git a/CapyKit/Attributes/ValueFormatAttribute.cs b/CapyKit/Attributes/ValueFormatAttribute.cs
deleted file mode 100644
index 67c7ebc..0000000
--- a/CapyKit/Attributes/ValueFormatAttribute.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace CapyKit.Attributes
-{
- ///
- /// Custom attribute for formatting values in a specific way.
- ///
- [AttributeUsage(AttributeTargets.Property)]
- public class ValueFormatAttribute : Attribute
- {
- #region Properties
-
- /// Gets or sets the format to use for formatting the value.
- /// The format string used to format the value.
- public string Format { get; private set; }
-
- #endregion Properties
-
- #region Constructors
-
- ///
- /// Default constructor. Initializes a new instance of the
- /// class with an empty format string.
- ///
- public ValueFormatAttribute()
- {
- this.Format = string.Empty;
- }
-
- ///
- /// Constructor. Initializes a new instance of the class with
- /// the specified format string.
- ///
- /// The format string used to format the value.
- public ValueFormatAttribute(string format)
- {
- this.Format = format;
- }
-
- #endregion Constructors
-
- #region Methods
-
- /// Gets a parameterized formatted string for the specified index.
- /// (Optional) Zero-based index of the item in the string to format.
- /// A formatted string with the specified index and format.
- public string GetFormatParameterizedString(int index = 0)
- {
- return "{" + index + ":" + this.Format + "}";
- }
-
- #endregion Methods
- }
-}
diff --git a/CapyKit/EncryptedValue.cs b/CapyKit/EncryptedValue.cs
deleted file mode 100644
index dff9016..0000000
--- a/CapyKit/EncryptedValue.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace CapyKit
-{
- public class EncryptedValue
- {
- #region Members
-
- //
-
- #endregion
-
- #region Properties
-
- public T Value { get; set; }
-
- #endregion
- }
-}
diff --git a/CapyKit/Helpers/EncryptionHelper.cs b/CapyKit/Helpers/EncryptionHelper.cs
deleted file mode 100644
index b82dcd0..0000000
--- a/CapyKit/Helpers/EncryptionHelper.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices.ObjectiveC;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace CapyKit.Helpers
-{
- public class EncryptionHelper
- {
- #region Members
-
- private string encryptionKey;
-
- #endregion
-
- #region Constructors
-
- public EncryptionHelper(string encryptionKey)
- {
- this.encryptionKey = encryptionKey;
- }
-
- #endregion
- }
-
- public interface IEncryptionAlgorithm
- {
- #region Properties
-
- string AlgorithmName { get; }
-
- #endregion
-
- #region Methods
-
- EncryptedValue Encrypt(object obj, params object[] args);
-
- T Decrypt(EncryptedValue encryptedValue, params object[] args);
-
- #endregion
- }
-}
diff --git a/CapyKit/Helpers/SecurityHelper.cs b/CapyKit/Helpers/SecurityHelper.cs
index 9f58541..0ecfc64 100644
--- a/CapyKit/Helpers/SecurityHelper.cs
+++ b/CapyKit/Helpers/SecurityHelper.cs
@@ -15,8 +15,8 @@ namespace CapyKit.Helpers
{
#region Members
- /// Default size to use when generating a new salt.
- private const int SALT_SIZE = 32;
+ /// Default size of the generated salt.
+ private const int saltSize = 32;
/// A string of all the lower case characters.
internal const string LOWER_CASE_CHARACTERS = "abcdefghijklmnopqrstuvwxyz";
@@ -35,131 +35,25 @@ namespace CapyKit.Helpers
#region Methods
///
- /// Compares an unencrypted with a stored, encrypted .
- /// This method uses the specified password algorithm type to retrieve the hashed version
- /// of the and then compares it with the .
+ /// Compares an unencrypted with a stored, encrypted
+ /// .
///
- /// The type of the password hashing algorithm.
- /// The existing, encrypted password.
- /// The unencrypted password to be compared.
- /// The salt value used in password hashing.
- /// Additional arguments required for constructing the password algorithm instance.
+ /// The provided password, unencrypted.
+ /// The existing, encrypted password.
///
/// if hash comparison succeeds, if it fails.
///
- public static bool CompareHashedPassword(Password existingPassword, string password, byte[] salt, params object[] args)
+ public static bool CompareHashedPassword(string providedPassword, string existingPassword)
{
- var providedPassword = typeof(SecurityHelper)
- .GetMethod("GetPassword")
- ?.MakeGenericMethod(typeof(T))
- ?.Invoke(null, new object[] { password, salt, args });
-
- return existingPassword.Equals(providedPassword);
+ throw new NotImplementedException();
}
- ///
- /// Compares an unencrypted with a stored, encrypted .
- /// This method uses the specified to retrieve the hashed version
- /// of the and then compares it with the .
- ///
- /// The existing, encrypted password.
- /// The unencrypted password to be compared.
- /// The salt value used in password hashing.
- /// The password hashing algorithm.
- /// Additional arguments required for constructing the password algorithm instance.
- ///
- /// if hash comparison succeeds, if it fails.
- ///
- public static bool CompareHashedPassword(Password existingPassword, string password, byte[] salt, IPasswordAlgorithm algorithm, params object[] args)
+ /// Hashes an unencrypted password.
+ /// The password.
+ /// The hashed password.
+ public static string HashPassword(string password)
{
- var algorithmType = algorithm.GetType();
-
- var providedPassword = typeof(SecurityHelper)
- .GetMethod("GetPassword")
- ?.MakeGenericMethod(algorithmType)
- ?.Invoke(null, new object[] { password, salt, args });
-
- return existingPassword.Equals(providedPassword);
- }
-
- ///
- /// Retrieves a object using the specified password and generates a random salt value.
- /// Then it uses that salt to call the overloaded method with the given password and
- /// the generated salt as arguments.
- ///
- /// The type of implementation to use.
- /// The plaintext password to be hashed.
- ///
- /// Optional constructor arguments for the implementation
- /// instance.
- ///
- ///
- /// A new object with the given password and a randomly generated salt, as well as an
- /// instance of created using any optional constructor arguments provided.
- ///
- ///
- public static Password GetPassword(string password, params object[] args)
- {
- var salt = SecurityHelper.GetRandomBytes(SecurityHelper.SALT_SIZE);
- return GetPassword(password, salt, args);
- }
-
- ///
- /// Retrieves a object using the specified password, salt, and optional
- /// constructor arguments.
- ///
- ///
- /// This method uses reflection to find a constructor for the specified password algorithm type ().
- /// It emits an error event if a suitable constructor is not found or if there is an error invoking the constructor.
- ///
- ///
- /// The type of implementation to use.
- ///
- /// The plaintext password to be hashed.
- ///
- /// A random value used as an additional input to the one-way function that hashes data, a
- /// password or passphrase. This is used to make each output different for the same input
- /// thus adding security.
- ///
- ///
- /// Optional constructor arguments for the implementation
- /// instance.
- ///
- ///
- /// A new object with the given password and salt, as well as an instance
- /// of created using the provided constructor arguments.
- ///
- public static Password GetPassword(string password, byte[] salt, params object[] args) where T : IPasswordAlgorithm
- {
- var allArgs = args.Prepend(salt).Prepend(password).ToArray(); // Prepend in reverse order so that password precedes salt.
- var argTypes = allArgs.Select(arg => arg.GetType()).ToArray();
- var algorithmConstructor = typeof(T).GetConstructor(argTypes);
-
- if (algorithmConstructor == null)
- {
- CapyEventReporter.EmitEvent(EventLevel.Error, "Cannot find a constructor for {0} that matches the given arguments: {1}",
- args: new[]
- {
- typeof(T).Name,
- string.Join(",", argTypes.Select(arg => arg.Name))
- });
- return default(Password);
- }
-
- var passwordInstance = (T)algorithmConstructor.Invoke(allArgs);
-
- if (passwordInstance == null)
- {
- CapyEventReporter.EmitEvent(EventLevel.Error, "There was an error invoking the constructor for {0} with the given arguments: {1}",
- args: new[]
- {
- typeof(T).Name,
- string.Join(",", allArgs)
- });
- return default(Password);
- }
-
- return new Password(password, salt, passwordInstance, args);
+ throw new NotImplementedException();
}
///
@@ -201,7 +95,7 @@ namespace CapyKit.Helpers
///
public static Password Pbkdf2(string password)
{
- var salt = SecurityHelper.GetRandomBytes(SALT_SIZE);
+ var salt = SecurityHelper.GetRandomBytes(saltSize);
var pwd = new Password(password, salt, Password.Pbkdf2Algorithm);
return pwd;
@@ -292,11 +186,6 @@ namespace CapyKit.Helpers
return buffer;
}
- ///
- /// Static method that returns a valid character composition based on the given ValidCharacterCollection parameters.
- ///
- /// An array of ValidCharacterCollection enumeration values representing the desired character sets.
- /// A string containing all the characters from the specified character sets.
private static string GetValidCharacterComposition(params ValidCharacterCollection[] validCharacters)
{
var composition = new StringBuilder();
diff --git a/CapyKit/Password.cs b/CapyKit/Password.cs
index 179413d..209b18d 100644
--- a/CapyKit/Password.cs
+++ b/CapyKit/Password.cs
@@ -16,7 +16,7 @@ namespace CapyKit
{
#region Members
- private static Lazy pbkdf2Algorithm = new Lazy(() => new Pbkdf2Algorithm());
+ private static Lazy algorithm = new Lazy(() => new Pbkdf2Algorithm());
#endregion
@@ -37,19 +37,13 @@ namespace CapyKit
///
public IPasswordAlgorithm Algorithm { get; private set; }
- #region Preconfigued Password Algorithms
-
- /// Gets the preconfigured PBKDF2 algorithm.
- /// The preconfigured PBKDF2 algorithm.
public static Pbkdf2Algorithm Pbkdf2Algorithm
{
get
{
- return pbkdf2Algorithm.Value;
+ return algorithm.Value;
}
- }
-
- #endregion
+ }
#endregion
@@ -70,25 +64,6 @@ namespace CapyKit
#region Methods
- ///
- public override bool Equals(object? obj)
- {
- if(obj == null) return false; // The object is null, and this object is not.
-
- if(ReferenceEquals(this, obj)) return true; // The object is literally this object.
-
- var objPassword = obj as Password;
-
- if (objPassword == null)
- {
- return base.Equals(obj); // Objects aren't the same type. We can fall back to the default comparison.
- }
-
- return this.Algorithm.AlgorithmName == objPassword.Algorithm.AlgorithmName
- && this.Hash == objPassword.Hash
- && this.Salt == objPassword.Salt;
- }
-
///
public override string ToString()
{
@@ -96,24 +71,6 @@ namespace CapyKit
}
#endregion
-
- #region Operators
-
- ///
- public static bool operator ==(Password a, Password b)
- {
- return ReferenceEquals(a, b) // Literally the same object.
- || (ReferenceEquals(a, null) && ReferenceEquals(b,null)) // Both are null
- || a.Equals(b); // Both are not null but not the same object.
- }
-
- ///
- public static bool operator !=(Password a, Password b)
- {
- return !(a == b);
- }
-
- #endregion
}
///