WuhuIslandTesting/Library/PackageCache/com.unity.scriptablebuildpipeline@1.21.5/Editor/Utilities/SpookyHash.cs
2025-01-07 02:06:59 +01:00

50 lines
1.6 KiB
C#

#if UNITY_2019_3_OR_NEWER
using System.Security.Cryptography;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;
namespace UnityEditor.Build.Pipeline.Utilities
{
public unsafe sealed class SpookyHash : HashAlgorithm
{
Hash128 m_Hash;
SpookyHash()
{
Initialize();
}
public new static SpookyHash Create()
{
return new SpookyHash();
}
public override void Initialize() {}
protected override void HashCore(byte[] inputBuffer, int inputOffset, int inputCount)
{
if (inputBuffer == null || inputOffset < 0 || inputCount <= 0 || (inputCount > inputBuffer.Length) || (inputBuffer.Length - inputCount) < inputOffset)
return;
#if UNITY_2020_1_OR_NEWER
m_Hash.Append(inputBuffer, inputOffset, inputCount);
#else
throw new System.InvalidOperationException("SpookyHash implementation was unstable and not deterministic prior to Unity 2020.1. Use MD5 or MD4 instead.");
#endif
}
protected override byte[] HashFinal()
{
#if UNITY_2020_1_OR_NEWER
byte[] results = new byte[UnsafeUtility.SizeOf<Hash128>()];
byte* hashPtr = (byte*)UnsafeUtility.AddressOf(ref m_Hash);
fixed(byte* d = results)
UnsafeUtility.MemCpy(d, hashPtr, results.Length);
return results;
#else
throw new System.InvalidOperationException("SpookyHash implementation was unstable and not deterministic prior to Unity 2020.1. Use MD5 or MD4 instead.");
#endif
}
}
}
#endif