<?php
require_once "find_dsa.php";
$dsa_path = find_dsaphp();
require_once $dsa_path;

$k = new DSA;
$k->progress_class = "Number_Progress";
//$k->N = 160;
//$k->L = 165;
$k->generate();
var_dump($k);
printf("p: %s\nq: %s\ng: %s\ny: %s\nx: %s\ndps: %s\ncounter: %d\n", gmp_strval($k->p), gmp_strval($k->q), gmp_strval($k->g), gmp_strval($k->y), gmp_strval($k->x), gmp_strval($k->domain_parameter_seed), $k->counter);
echo "generated key valid: ".$k->validate()."\n";
$sig = $k->sign("foobar");
echo "r: ".gmp_strval($sig->sig[0])."\n"."s: ".gmp_strval($sig->sig[1])."\n";
echo "signature valid: ".$k->verify($sig)."\n";
echo "modified message valid: ".$k->verify_raw("foobarage", $sig->sig)."\n";
$sig->sig[0] = gmp_sub($sig->sig[0], 1);
echo "modified signature valid: ".$k->verify($sig)."\n";
echo "non-hashed signature valid: ".$k->sign("foobarage", null, FALSE)->verify($k, FALSE)."\n";
echo "non-hashed long signature valid: ".$k->sign("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", null, FALSE)->verify($k, FALSE)."\n";
echo 'k->generate exists: '.method_exists($k, 'generate')."\n";
$extk = new DSA;
$extk->p = gmp_init("89884656743115795410265110986801177865684965127520044992489492373859555576407155667268345633510946794974853896005884453717148935560982746883325013611220027966095533738214535185986856910517348252087210308810582893145174508529426136636831467455362348037826511891543118901909376160894886408058460103030709807459");
$extk->q = gmp_init("1003548540460414332259913982385683507603792054877");
$extk->g = gmp_init("6688461843956439718836782240647689670711700967273102728815480179516883089811588887714901101153878141278159216006749886213379664527090903557082589771768378082899939375273766380518318445576012771033089530897360921746015667607651750683592467515502539864142153270737042969323062519970035254186860216347331896434");
$extk->y = gmp_init("78012114235226754380488055999287343169352472804297685772688581768633732502143515632870108315020190921377343787161449558920930169165743722263235940558321588015210341568420663335267520768814209756732116590819689232914042631198246527838276253772881417457074105911409378316405749690293765027289048039035777186244");
echo "extenal signature valid: ".$extk->verify_raw("foo", array(gmp_init("536603820403594545889515425214952020647203860001"), gmp_init("437430210711275471822501469177388674662147762435")), FALSE)."\n";

echo "DSA g Test Vector 1:\n";
$gtest1 = new DSA;
$gtest1->p = gmp_init("0xe5256a788f875183ec56a332d38db31de883cded25ae635a656823b5c801b44a104f4e1d604153adaaa5d6d107feb3a8e721a32f3e6780645c85de2d4f4f85568767efc9b8363193497c052a5b832464b81a209d393eb6d3a464cba0b7607dc79b3611dcd1544e4ed329cc913f68234b1d5f209ae7081c0d44662ee1f86c458f");
$gtest1->q = gmp_init("0xe6fa5be8dfd1a200fd699a9ff4b02761f05fca69");
$gtest1->domain_parameter_seed = gmp_init("0x349394e2124ad0e58b0b8dba36ca5cb2a2f0e9ed");
$gtest1->gindex = 0x71;
$gtest1->generateG();
echo "\tGenerated value of g: ".gmp_strval($gtest1->g, 16)."\n";
$gtest1->g = gmp_init("0x5a0c1ebde9c0787f3d426e2036455fcd25bc32b1e666b2ba90dad169af7043c18b266d530d0f607ea46c182dd7c88d919158343441e001b10e36c8ffa03cb80dadcf7e84393561d2f4f2d067222d5a33157b81f4f4a46c9526375920cac73c23e100e8b43eb8a4bc83047ae45b079bca6dbf69b4b0c1e6bffdfd232b99c5d61a");
echo "\tReference value of g valid: ".$gtest1->validateG()."\n";

?>
