/* ---------------------------------------------------------------------------------------------
verification of a Rainbow signature
loads public key from public_key.txt and signature and hash value from signature_txt
and checks if signature is a valid Rainbow signature for the hash value
 --------------------------------------------------------------------------*/

printf "********************************************************* \n";
printf "*** Rainbow Signature Scheme - Signature Verification *** \n";
printf "********************************************************* \n \n";

load "public_key.txt";
load "signature.txt";

printf"signature:= %o \n \n", signature;
printf"hashvalue:= %o \n \n", hash;

hash2:=Pk;
for i:=1 to m do
	for j:=1 to n do
		hash2[i]:=Evaluate(hash2[i],Pol.j,signature[j]);
	end for;
end for;
hash2:=Hashspace!(hash2);

printf "P(signature)= %o \n \n", hash2;

if hash eq hash2 then
	printf "CORRECT!";
else
	printf "FALSE!";
end if;




