public function verify(param1:IDataInput, param2:ByteArray) : Boolean {
var header:String = null;
var len:uint = 0;
var input:IDataInput = param1;
var output:ByteArray = param2;
try
{
header = input.readUTF();
}
catch(e:Error)
{
throw new SignatureError("Invalid file format (can\'t read header)",SignatureError.INVALID_HEADER);
}
if(header != ANKAMA_SIGNED_FILE_HEADER)
{
throw new SignatureError("Invalid header",SignatureError.INVALID_HEADER);
}
else
{
formatVersion = input.readShort();
sigData = new ByteArray();
decryptedHash = new ByteArray();
try
{
len = input.readInt();
input.readBytes(sigData,0,len);
}
catch(e:Error)
{
throw new SignatureError("Invalid signature format, not enough data.",SignatureError.INVALID_SIGNATURE);
}
try
{
this._key.verify(sigData,decryptedHash,sigData.length);
}
catch(e:Error)
{
return false;
}
decryptedHash.position = 0;
ramdomPart = decryptedHash.readByte();
hash = new ByteArray();
i = 2;
while(i < decryptedHash.length)
{
decryptedHash[i] = decryptedHash[i] ^ ramdomPart;
i++;
}
contentLen = decryptedHash.readUnsignedInt();
testedContentLen = input.bytesAvailable;
signHash = decryptedHash.readUTFBytes(decryptedHash.bytesAvailable).substr(1);
input.readBytes(output);
tH = getTimer();
contentHash = MD5.hash(output.readUTFBytes(output.bytesAvailable)).substr(1);
trace("Temps de hash pour validation de signature : " + (getTimer() - tH) + " ms");
output.position = 0;
return (signHash) && signHash == contentHash && contentLen == testedContentLen;
}
}