diff --git a/SabreTools.Hashing/Checksum/Constants.cs b/SabreTools.Hashing/Checksum/Constants.cs
index 82c4dcf..5de3b20 100644
--- a/SabreTools.Hashing/Checksum/Constants.cs
+++ b/SabreTools.Hashing/Checksum/Constants.cs
@@ -2,7 +2,7 @@ namespace SabreTools.Hashing.Checksum
{
internal static class Constants
{
- #region Adler-32 / Fletcher-32
+ #region Adler-32
///
/// Largest prime smaller than 65536
@@ -14,6 +14,10 @@ namespace SabreTools.Hashing.Checksum
///
public const ushort A32NMAX = 5552;
+ #endregion
+
+ #region Fletcher-32
+
///
/// Max value for a single half of a Fletcher-32 checksum
///
@@ -25,15 +29,5 @@ namespace SabreTools.Hashing.Checksum
public const uint F64BASE = 0xffffffff;
#endregion
-
- #region FNV
-
- public const uint FNV32Basis = 0x811c9dc5;
- public const ulong FNV64Basis = 0xcbf29ce484222325;
-
- public const uint FNV32Prime = 0x01000193;
- public const ulong FNV64Prime = 0x00000100000001b3;
-
- #endregion
}
}
\ No newline at end of file
diff --git a/SabreTools.Hashing/Checksum/FnvBase.cs b/SabreTools.Hashing/Checksum/FnvBase.cs
deleted file mode 100644
index bad90c3..0000000
--- a/SabreTools.Hashing/Checksum/FnvBase.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace SabreTools.Hashing.Checksum
-{
- public abstract class FnvBase : ChecksumBase where T : struct
- {
- ///
- /// Initial value to use
- ///
- protected T _basis;
-
- ///
- /// Round prime to use
- ///
- protected T _prime;
-
- ///
- public override void Initialize()
- {
- _hash = _basis;
- }
- }
-}
\ No newline at end of file
diff --git a/SabreTools.Hashing/HashWrapper.cs b/SabreTools.Hashing/HashWrapper.cs
index 63eaea5..b5e3b9f 100644
--- a/SabreTools.Hashing/HashWrapper.cs
+++ b/SabreTools.Hashing/HashWrapper.cs
@@ -9,6 +9,7 @@ using Aaru.CommonTypes.Interfaces;
using Blake3;
#endif
using SabreTools.Hashing.Checksum;
+using SabreTools.Hashing.NonCryptographicHash;
using static SabreTools.Hashing.HashOperations;
namespace SabreTools.Hashing
diff --git a/SabreTools.Hashing/NonCryptographicHash/Constants.cs b/SabreTools.Hashing/NonCryptographicHash/Constants.cs
new file mode 100644
index 0000000..5a1fefc
--- /dev/null
+++ b/SabreTools.Hashing/NonCryptographicHash/Constants.cs
@@ -0,0 +1,15 @@
+namespace SabreTools.Hashing.NonCryptographicHash
+{
+ internal static class Constants
+ {
+ #region FNV
+
+ public const uint FNV32Basis = 0x811c9dc5;
+ public const ulong FNV64Basis = 0xcbf29ce484222325;
+
+ public const uint FNV32Prime = 0x01000193;
+ public const ulong FNV64Prime = 0x00000100000001b3;
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Hashing/Checksum/FNV0_32.cs b/SabreTools.Hashing/NonCryptographicHash/FNV0_32.cs
similarity index 79%
rename from SabreTools.Hashing/Checksum/FNV0_32.cs
rename to SabreTools.Hashing/NonCryptographicHash/FNV0_32.cs
index 469d679..52de50a 100644
--- a/SabreTools.Hashing/Checksum/FNV0_32.cs
+++ b/SabreTools.Hashing/NonCryptographicHash/FNV0_32.cs
@@ -1,6 +1,6 @@
-using static SabreTools.Hashing.Checksum.Constants;
+using static SabreTools.Hashing.NonCryptographicHash.Constants;
-namespace SabreTools.Hashing.Checksum
+namespace SabreTools.Hashing.NonCryptographicHash
{
public class FNV0_32 : FnvBase
{
diff --git a/SabreTools.Hashing/Checksum/FNV0_64.cs b/SabreTools.Hashing/NonCryptographicHash/FNV0_64.cs
similarity index 79%
rename from SabreTools.Hashing/Checksum/FNV0_64.cs
rename to SabreTools.Hashing/NonCryptographicHash/FNV0_64.cs
index b3f45fe..9fbc7d7 100644
--- a/SabreTools.Hashing/Checksum/FNV0_64.cs
+++ b/SabreTools.Hashing/NonCryptographicHash/FNV0_64.cs
@@ -1,6 +1,6 @@
-using static SabreTools.Hashing.Checksum.Constants;
+using static SabreTools.Hashing.NonCryptographicHash.Constants;
-namespace SabreTools.Hashing.Checksum
+namespace SabreTools.Hashing.NonCryptographicHash
{
public class FNV0_64 : FnvBase
{
diff --git a/SabreTools.Hashing/Checksum/FNV1_32.cs b/SabreTools.Hashing/NonCryptographicHash/FNV1_32.cs
similarity index 80%
rename from SabreTools.Hashing/Checksum/FNV1_32.cs
rename to SabreTools.Hashing/NonCryptographicHash/FNV1_32.cs
index 267733c..86a35a6 100644
--- a/SabreTools.Hashing/Checksum/FNV1_32.cs
+++ b/SabreTools.Hashing/NonCryptographicHash/FNV1_32.cs
@@ -1,6 +1,6 @@
-using static SabreTools.Hashing.Checksum.Constants;
+using static SabreTools.Hashing.NonCryptographicHash.Constants;
-namespace SabreTools.Hashing.Checksum
+namespace SabreTools.Hashing.NonCryptographicHash
{
public class FNV1_32 : FnvBase
{
diff --git a/SabreTools.Hashing/Checksum/FNV1_64.cs b/SabreTools.Hashing/NonCryptographicHash/FNV1_64.cs
similarity index 80%
rename from SabreTools.Hashing/Checksum/FNV1_64.cs
rename to SabreTools.Hashing/NonCryptographicHash/FNV1_64.cs
index 8a29e5a..5f22bc6 100644
--- a/SabreTools.Hashing/Checksum/FNV1_64.cs
+++ b/SabreTools.Hashing/NonCryptographicHash/FNV1_64.cs
@@ -1,6 +1,6 @@
-using static SabreTools.Hashing.Checksum.Constants;
+using static SabreTools.Hashing.NonCryptographicHash.Constants;
-namespace SabreTools.Hashing.Checksum
+namespace SabreTools.Hashing.NonCryptographicHash
{
public class FNV1_64 : FnvBase
{
diff --git a/SabreTools.Hashing/Checksum/FNV1a_32.cs b/SabreTools.Hashing/NonCryptographicHash/FNV1a_32.cs
similarity index 80%
rename from SabreTools.Hashing/Checksum/FNV1a_32.cs
rename to SabreTools.Hashing/NonCryptographicHash/FNV1a_32.cs
index 57a6596..c7b6c75 100644
--- a/SabreTools.Hashing/Checksum/FNV1a_32.cs
+++ b/SabreTools.Hashing/NonCryptographicHash/FNV1a_32.cs
@@ -1,6 +1,6 @@
-using static SabreTools.Hashing.Checksum.Constants;
+using static SabreTools.Hashing.NonCryptographicHash.Constants;
-namespace SabreTools.Hashing.Checksum
+namespace SabreTools.Hashing.NonCryptographicHash
{
public class FNV1a_32 : FnvBase
{
diff --git a/SabreTools.Hashing/Checksum/FNV1a_64.cs b/SabreTools.Hashing/NonCryptographicHash/FNV1a_64.cs
similarity index 80%
rename from SabreTools.Hashing/Checksum/FNV1a_64.cs
rename to SabreTools.Hashing/NonCryptographicHash/FNV1a_64.cs
index 1dfde00..2cf5965 100644
--- a/SabreTools.Hashing/Checksum/FNV1a_64.cs
+++ b/SabreTools.Hashing/NonCryptographicHash/FNV1a_64.cs
@@ -1,6 +1,6 @@
-using static SabreTools.Hashing.Checksum.Constants;
+using static SabreTools.Hashing.NonCryptographicHash.Constants;
-namespace SabreTools.Hashing.Checksum
+namespace SabreTools.Hashing.NonCryptographicHash
{
public class FNV1a_64 : FnvBase
{
diff --git a/SabreTools.Hashing/NonCryptographicHash/FnvBase.cs b/SabreTools.Hashing/NonCryptographicHash/FnvBase.cs
new file mode 100644
index 0000000..f774381
--- /dev/null
+++ b/SabreTools.Hashing/NonCryptographicHash/FnvBase.cs
@@ -0,0 +1,60 @@
+using System;
+
+namespace SabreTools.Hashing.NonCryptographicHash
+{
+ ///
+ /// Common base class for FNV non-cryptographic hashes
+ ///
+ public abstract class FnvBase : System.Security.Cryptography.HashAlgorithm
+ {
+ // No common, untyped functionality
+ }
+
+ ///
+ /// Common base class for FNV non-cryptographic hashes
+ ///
+ public abstract class FnvBase : FnvBase where T : struct
+ {
+ ///
+ /// Initial value to use
+ ///
+ protected T _basis;
+
+ ///
+ /// Round prime to use
+ ///
+ protected T _prime;
+
+ ///
+ /// The current value of the hash
+ ///
+ protected T _hash;
+
+ ///
+ public override void Initialize()
+ {
+ _hash = _basis;
+ }
+
+ ///
+ protected override byte[] HashFinal()
+ {
+ byte[] hashArr = _hash switch
+ {
+ short s => BitConverter.GetBytes(s),
+ ushort s => BitConverter.GetBytes(s),
+
+ int i => BitConverter.GetBytes(i),
+ uint i => BitConverter.GetBytes(i),
+
+ long l => BitConverter.GetBytes(l),
+ ulong l => BitConverter.GetBytes(l),
+
+ _ => [],
+ };
+
+ Array.Reverse(hashArr);
+ return hashArr;
+ }
+ }
+}
\ No newline at end of file