/*****************************************************************************/
/*
  File: rsa.H
  Contents: Contains info needed in rsa.C
  Ron Hannebohn, CMSC 443, */



#ifndef _RSA_H
#define _RSA_H


/*****************************************************************************/
/*                                   Constants                               */
/*****************************************************************************/

const int MAX_ANSWER_LENGTH =   1000;
const int MAX_TIME =            1000000;
const int MAX_SIZE =            750;
const int GENERATE_PRIMES =     1;
const int DISPLAY_PRIMES =      2;
const int COMPUTE_N_AS_PPROD =  3;
const int TRIAL_DIV_FACTORING = 4;
const int POLLARD_FACTOR =      5;
const int PHI  =                6;
const int RANDOM_E =            7;
const int MOD_INVERSE =         8; 
const int DISPLAY =             9;
const int EXPONENTIATE =        10;
const int EXIT =                11;



/*****************************************************************************/
/*                             Function Prototypes                           */
/*****************************************************************************/

void PrintMenu();
Integer Jacobi(const Integer &, const Integer &);
void Factor(const Integer &, Integer &, Integer &);
void PollardRho(const Integer &, Integer &, Integer &); 
Integer Inverse(const Integer &, const Integer &);
Integer FastExp(const Integer &, const Integer &, const Integer &);
Integer GetPositiveInt(char *prompt);
int InPrimeList(Integer, Integer *, int);
Integer GetPhi(Integer &, Integer &, Integer *, int);
void DisplayPrimeList(Integer *, int);

#endif


