// iterative hash function private byte[] Func() { byte[] INT_block = Utils.GetBigEndianBytes(_block); _hmac.TransformBlock(_salt, 0, _salt.Length, _salt, 0); _hmac.TransformFinalBlock(INT_block, 0, INT_block.Length); byte[] temp = _hmac.Hash; _hmac.Initialize(); byte[] ret = temp; for (int i = 2; i <= _iterationCount; i++) { temp = _hmac.ComputeHash(temp); for (int j = 0; j < _blockSize; j++) { ret[j] ^= temp[j]; } } _block++; return(ret); }