using System; using System.Collections.ObjectModel; namespace SUISS.Cloud.Crypto { public class HmacSha256 { public HmacSha256(byte[] key) { this._key = new byte[64]; if (key.Length > 64) { ReadOnlyCollection readOnlyCollection = Sha256.HashBytes(new object[] { key }); readOnlyCollection.CopyTo(this._key, 0); } else { Array.Copy(key, this._key, key.Length); } } public byte[] ComputeHash(byte[] message) { byte[] array = new byte[64]; Array.Copy(this._key, array, 64); byte[] array2 = new byte[64]; Array.Copy(this._key, array2, 64); for (int i = 0; i < 64; i++) { byte[] array3 = array; int num = i; array3[num] ^= 92; byte[] array4 = array2; int num2 = i; array4[num2] ^= 54; } ReadOnlyCollection readOnlyCollection = Sha256.HashBytes(new object[] { array, Sha256.HashBytes(new object[] { array2, message }) }); byte[] array5 = new byte[readOnlyCollection.Count]; readOnlyCollection.CopyTo(array5, 0); return array5; } private const int BlockSize = 64; private byte[] _key; } }