static public bool CheckMAC(ArraySegment <byte> blob, ArraySegment <byte> mac, byte[] macKey) { byte[] computedMAC; using (HMACSHA256 hmac = new HMACSHA256(macKey)) computedMAC = hmac.ComputeHash(blob.Array, blob.Offset, blob.Count); return(ArraySegmentExt.Equals(computedMAC, mac)); }
static public byte[] Decrypt(ArraySegment <byte> encryptedBlob, ArraySegment <byte> iv, byte[] encryptionKey) { using (Rijndael rijndael = Rijndael.Create()) { rijndael.Key = encryptionKey; rijndael.IV = ArraySegmentExt.GetByteArray(iv); rijndael.Mode = CipherMode.CBC; rijndael.Padding = PaddingMode.None; using (ICryptoTransform decryptor = rijndael.CreateDecryptor()) using (MemoryStream ms = new MemoryStream()) using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write)) { cs.Write(encryptedBlob.Array, encryptedBlob.Offset, encryptedBlob.Count); return(ms.ToArray()); } } }