|
- 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<byte> 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<byte> 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;
- }
- }
|