/* montgomery multiplication / exponentiation
 * pesco, 2009
 */

#include <stdint.h>

int eq(int n, uint32_t *A, uint32_t *B);
int gte(int n, uint32_t *A, int i, uint32_t *B);
int sub(int n, uint32_t *A, int i, uint32_t *B);
uint32_t muladd(int n, uint32_t *A, int i, uint32_t x, uint32_t *Y);
void monty_mul(int n, uint32_t *N, uint32_t *A, uint32_t *X, uint32_t *Y);
void monty_exp(int n, uint32_t *N, uint32_t *R, uint32_t *A, uint32_t *X, uint32_t *Y);
void mrand(int n, uint32_t *N, uint32_t *A);
