#include <iostream>
#include <string>

#include "files.h"
#include "filters.h"

#include "osrng.h"
#include "oids.h"

#include "eccrypto.h"
#include "ecp.h"
#include "base64.h"
#include "base32.h"

using namespace CryptoPP;
using namespace std;

int main(int argc, char *argv[])
{
  AutoSeededRandomPool rng;
  
  //string pubstring = "MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEwdYKUvsvtlCxTDATtTUAhJNIIQsC86fva9Z8oA==";
  string pubstring = argv[1];

  StringSource pubsource(pubstring, true, new Base64Decoder);
  ECDSA<ECP>::Verifier pub(pubsource);

  //char m[] = "This is the message to be signed";
  char *m = argv[2];

  //string signaturestring = "BTAepoVYhkY4X3bjkFILL73XyhsfWjjU1Z7q2A==";
  string signaturestring = argv[3];
  StringSource signaturesource(signaturestring, true, new Base32Decoder);
  SecByteBlock signature(pub.SignatureLength());
  signaturesource.Get(signature, signature.size());

  if (pub.VerifyMessage((const byte *)m, strlen(m), signature.begin(), signature.size()))
    cout << "OK" << endl;
  else
    cout << "Bad signature!!" << endl;

  return 0;
}

