| 
<?include "kravatte_final.php";
 
 function xtrae($key,$vector,$x="")
 {
 $k  = explode(",",explode('])',explode("$key = $x"."bytes([",$vector)[1])[0]);
 $zk = "";foreach ($k as $m) $zk .=@explode("0x",trim($m))[1];
 return pack("H*",$zk);
 }
 
 $x=new Kravatte;
 
 // Test Vectors
 
 $server   = "http://raw.githubusercontent.com/inmcm/kravatte/master/tests";
 
 $fvectors = ["mac"];
 
 foreach ($fvectors as $f)
 {
 $count   = 0;
 echo "Kravatte $f ";
 $vectors = file_get_contents("$server/test_kravatte_$f.py");
 $vectors = explode("def test_",$vectors);
 
 foreach (array_slice(array_slice($vectors,1),0,-1) as $vector)
 {
 $count++;
 $type   = explode('(',explode('kravatte_',$vector)[1])[0];
 $size   = explode("_",explode("(",$vector)[0]); $size = $size[sizeof($size)-1];
 
 $zk    = xtrae("my_key",$vector);
 $zm    = xtrae("my_message",$vector);
 $out    = bin2hex(xtrae("real_output",$vector));
 
 $res    = $x->mac($zk,$zm, $size);
 
 if (($res != $out))
 die("$count Bad");
 }
 echo "OK $count tested\n";
 }
 
 $fvectors = ["sane"];
 
 foreach ($fvectors as $f)
 {
 $count   = 0;
 echo "Kravatte $f ";
 $vectors = file_get_contents("$server/test_kravatte_$f.py");
 $vectors = explode("def test_kravatte",$vectors);
 
 foreach (array_slice($vectors,1) as $vector)
 {
 $count++;
 $type = explode('(',explode('SANE_',$vector)[1])[0];
 
 $zk            = xtrae("my_key",$vector);
 $zm            = xtrae("my_message",$vector);
 $meta            = xtrae("my_metadata",$vector);
 $nonce            = xtrae("my_nonce",$vector);
 $output_ciphertext    = bin2hex(xtrae("output_ciphertexts",$vector,"["));
 $output_tag        = bin2hex(xtrae("output_tags",$vector,"["));
 
 $x->Kravatte_SANE($nonce,$zk);
 
 [$cipher,$tag] = $x->Kravatte_SANE_enc($zm, $meta);
 
 if (($cipher != $output_ciphertext) or ($tag != $output_tag))
 die("$count Bad");
 }
 echo "OK $count tested\n";
 }
 
 $fvectors = ["sanse"];
 
 foreach ($fvectors as $f)
 {
 $count   = 0;
 echo "Kravatte $f ";
 $vectors = file_get_contents("$server/test_kravatte_$f.py");
 $vectors = explode("def test_kravatte",$vectors);
 
 foreach (array_slice($vectors,1) as $vector)
 {
 $count++;
 $type = explode('(',explode('SANSE_',$vector)[1])[0];
 
 $zk            = xtrae("my_key",$vector);
 $zm            = xtrae("my_message",$vector);
 $meta            = xtrae("my_metadata",$vector);
 $output_ciphertext    = bin2hex(xtrae("output_ciphertexts",$vector,"["));
 $output_tag        = bin2hex(xtrae("output_tags",$vector,"["));
 
 $x->Kravatte_SANSE($zk);
 
 [$cipher,$tag] = $x->Kravatte_SANSE_enc($zm, $meta);
 
 if (($cipher != $output_ciphertext) or ($tag != $output_tag))
 die("$count Bad");
 }
 echo "OK $count tested\n";
 }
 
 $fvectors = ["wbc"];
 
 foreach ($fvectors as $f)
 {
 $count   = 0;
 echo "Kravatte $f ";
 $vectors = file_get_contents("$server/test_kravatte_$f.py");
 $vectors = explode("def test_kravatte",$vectors);
 
 foreach (array_slice($vectors,2) as $vector)
 {
 $count++;
 $type=explode('(',explode('WBC_',$vector)[1])[0];
 
 $zk            = xtrae("my_key",$vector);
 $zm            = xtrae("my_message",$vector);
 $tweak            = xtrae("my_tweak",$vector);
 $output_ciphertext    = bin2hex(xtrae("real_ciphertext",$vector));
 
 $x->Kravatte_WBC(strlen($zm), $tweak,$zk);
 
 $cipher = $x->Kravatte_WBC_enc($zm);
 
 if (($cipher != $output_ciphertext))
 die("$count Bad");
 }
 echo "OK $count $f tested\n";
 }
 
 $fvectors = ["wbc_ae"];
 
 foreach ($fvectors as $f)
 {
 $count = 0;
 echo "Kravatte $f ";
 $vectors = file_get_contents("$server/test_kravatte_$f.py");
 $vectors = explode("def test_kravatte",$vectors);
 
 foreach (array_slice($vectors,1) as $vector)
 {
 $count++;
 $type = explode('(',explode('WBC_AE_',$vector)[1])[0];
 
 $zk            = xtrae("my_key",$vector);
 $zm            = xtrae("my_message",$vector);
 $meta            = xtrae("my_metadata",$vector);
 $output_ciphertext    = bin2hex(xtrae("real_ciphertext",$vector));
 
 $x->Kravatte_WBC_AE(strlen($zm), $zk);
 
 $cipher = $x->Kravatte_WBC_AE_enc($zm,$meta);
 
 if (($cipher != $output_ciphertext))
 die("$count Bad");
 }
 echo "OK $count $f tested\n";
 }
 
 echo "Kravatte oracle ";
 $vectors = file_get_contents("$server/test_kravatte_oracle.py");
 $vectors = explode("def test_kravatte",$vectors);
 
 foreach (array_slice($vectors,1) as $vector)
 {
 $type=explode('(',explode('random_oracle_',$vector)[1])[0];
 
 $zk            = xtrae("my_key",$vector);
 $zm            = xtrae("my_message",$vector);
 $real            = bin2hex(xtrae("real_output",$vector));
 
 $x->KravatteOracle($zm, $zk);
 
 $index_ref = [[0, 1], [200, 202], [400, 404], [600, 608], [800, 816], [1000, 1032],
 [1200, 1264], [1400, 1528], [1600, 1856], [2000, 2512], [2600, 3624],
 [3800, 5848]];
 
 for ($h=0;$h<12;$h++)
 {
 $k   = 2**$h;
 $res = $x->random($k);
 [$start, $stop] = $index_ref[$h];
 $m   = substr($real,$start*2,$stop*2-$start*2);
 
 if (($m != $res))
 die("$k Bad");
 }
 }
 echo "OK \n\n";
 
 |