/* -------------------------------------------------------------
Verification Process of (Unbalanced) Oil and Vinegar
loads public key from UOV/public_key.txt and signature and hash value from UOV/signature.txt
checks if signature is a valid UOV Signature for the hash value and outputs TRUE or FALSE
---------------------------------------------------------------*/

printf "******************************************************* \n";
printf "*** (U)OV Signature Scheme - Signature Verification *** \n";
printf "******************************************************* \n \n";

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

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

printf"message:= %o \n \n", hashvalue;

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

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

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




