#include <cassert>
#include <iostream>
using namespace std;

#include <NTL/ZZ.h>
using namespace NTL;

#include <commandline.h>
#include <passwordverifier001test.h>
#include <rsastate.h>
#include <rsatest.h>


int main(int argc, char** argv)
{
  commandline cmd(argc,argv);
  uint prog(0);
  cmd.mapvar(prog,"prog");

  if (cmd.hastoken("rsa"))
  {
    rsastate s(argc,argv);

    return 0;
  }

  switch (prog)
  {
    case 0:
      cout << "To run the RSA encryption/decrytion program" << endl;
      cout << "./main rsa" <<  endl;
      cout << "Other programs." << endl;

      cout << "./main prog=1  - Small RSA example with maths library." << endl;
      cout << "./main prog=2  - Small RSA example with rsa classes." << endl;
      cout << "./main prog=3  - String and stream conversions written to files." << endl;
      cout << "./main prog=4  - Comparing sequential and random prime generation." << endl;

      break;

    case 1: return rsatest::unittest01(); 
    case 2: return rsatest::unittest02(); 
    case 3: rsatest::test01(); break;
    case 4: rsatest::test02(argc,argv); break;

    case 10: return passwordverifier001test::unittest01();
    case 11: passwordverifier001test::test02(); break;

    default: cout << "error:  No case handled." << endl; return 1;
  }

  return 0;
}

