/* $OpenXM: OpenXM_contrib2/asir2000/engine/mi.c,v 1.1 1999/12/03 07:39:08 noro Exp $ */
#include "ca.h"
extern int current_mod;
void addmi(a,b,c)
MQ a,b;
MQ *c;
{
if ( !current_mod )
error("addmi : invalid modulus");
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
error("addmi : invalid argument");
addmq(current_mod,a,b,c);
}
void submi(a,b,c)
MQ a,b;
MQ *c;
{
if ( !current_mod )
error("submi : invalid modulus");
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
error("submi : invalid argument");
submq(current_mod,a,b,c);
}
void mulmi(a,b,c)
MQ a,b;
MQ *c;
{
if ( !current_mod )
error("mulmi : invalid modulus");
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
error("mulmi : invalid argument");
mulmq(current_mod,a,b,c);
}
void divmi(a,b,c)
MQ a,b;
MQ *c;
{
if ( !current_mod )
error("divmi : invalid modulus");
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
error("divmi : invalid argument");
divmq(current_mod,a,b,c);
}
void chsgnmi(a,c)
MQ a,*c;
{
if ( !current_mod )
error("chsgnmi : invalid modulus");
if ( a && NID(a) != N_M )
error("chsgnmi : invalid argument");
submq(current_mod,0,a,c);
}
void pwrmi(a,b,c)
MQ a;
Q b;
MQ *c;
{
if ( !current_mod )
error("pwrmi : invalid modulus");
if ( a && NID(a) != N_M )
error("pwrmi : invalid argument");
pwrmq(current_mod,a,b,c);
}
int cmpmi(a,b)
MQ a,b;
{
int c;
if ( !current_mod )
error("cmpmi : invalid modulus");
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) )
error("cmpmi : invalid argument");
if ( !a )
if ( !b )
return 0;
else
return CONT(b) < 0;
else
if ( !b )
return CONT(a) > 0;
else {
c = CONT(a)-CONT(b);
if ( c % current_mod )
return c > 0;
else
return 0;
}
}