Mapping 256Bit Hash to 32Bit Indexed Hash
using System.Security.Cryptography;
public class Mapping256BitTo32BitHash : HashAlgorithm
{
private readonly SHA256Managed hasher = new SHA256Managed();
public readonly TinyDictionary<byte[], byte[]> map = new TinyDictionary<byte[], byte[]>(101, new ArrayComparer());
private byte[] h160;
public override int HashSize => 32;
public override void Initialize()
{
}
protected override void HashCore(byte[] bytes, int ibStart, int cbSize)
{
h160 = hasher.ComputeHash(bytes, ibStart, cbSize);
map.Add(h160, bytes);
}
protected override byte[] HashFinal()
{
HashValue = (byte[])map.FindKeyIndex(h160).GetBytes().Clone();
return HashValue;
}
}