private bool VerifyServer(InputStream inputBuffer)
{
var pBuffer = new BufferWithOffset(inputBuffer);
pBuffer.Offset++;
var serverDigestPos = GetDigestOffset(pBuffer, _usedScheme);
var pTempBuffer = new byte[1536 - 32];
Buffer.BlockCopy(inputBuffer.GetBuffer(), pBuffer.Offset, pTempBuffer, 0, (int)serverDigestPos);
Buffer.BlockCopy(inputBuffer.GetBuffer(), (int)(pBuffer.Offset+serverDigestPos + 32), pTempBuffer, (int)serverDigestPos, (int)(1536 - serverDigestPos - 32));
var pDigest = HMACsha256(pTempBuffer, 1536 - 32, GenuineFmsKey, 36);
for (var i = 0; i < 32; i++)
{
if (pDigest[i] != pBuffer[(int) (i + serverDigestPos)])
{
Logger.FATAL("Server not verified");
return false;
}
}
pBuffer.Offset += 1536;
var pChallange = HMACsha256(_pClientDigest, 32, GenuineFmsKey, 68);
pDigest = new HMACSHA256(pChallange).ComputeHash(pBuffer.Buffer, pBuffer.Offset, 1536 - 32);
for (var i = 0; i < 32; i++)
{
if (pDigest[i] != pBuffer[i + 1536 - 32])
{
Logger.FATAL("Server not verified");
return false;
}
}
return true;
}