version 1.12, 2002/09/27 08:40:49 |
version 1.17, 2003/05/07 06:26:49 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/engine/gfs.c,v 1.11 2002/09/27 04:24:04 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/gfs.c,v 1.16 2003/01/16 00:33:28 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "inline.h" |
#include "inline.h" |
Line 661 int mulremum_enc(int p,int n,UM dp,int a,int b) |
|
Line 661 int mulremum_enc(int p,int n,UM dp,int a,int b) |
|
|
|
void gfs_galois_action(GFS a,Q e,GFS *c) |
void gfs_galois_action(GFS a,Q e,GFS *c) |
{ |
{ |
Q q; |
Q p; |
int i,k; |
int i,k; |
GFS t,s; |
GFS t,s; |
|
|
t = a; |
t = a; |
k = QTOS(e); |
k = QTOS(e); |
STOQ(current_gfs_q,q); |
STOQ(current_gfs_p,p); |
for ( i = 0; i < k; i++ ) { |
for ( i = 0; i < k; i++ ) { |
pwrgfs(t,q,&s); t = s; |
pwrgfs(t,p,&s); t = s; |
} |
} |
*c = t; |
*c = t; |
} |
} |
Line 727 void qtogfs(Q a,GFS *c) |
|
Line 727 void qtogfs(Q a,GFS *c) |
|
{ |
{ |
int s; |
int s; |
|
|
|
if ( a && (SGN(a) < 1) ) |
|
error("qtogfs : invalid argument"); |
s = QTOS(a)%current_gfs_q; |
s = QTOS(a)%current_gfs_q; |
itogfs(s,c); |
itogfs(s,c); |
} |
} |
Line 750 void gfstomq(GFS a,MQ *c) |
|
Line 752 void gfstomq(GFS a,MQ *c) |
|
} |
} |
} |
} |
|
|
|
void gfstopgfs(GFS a,V v,P *c) |
|
{ |
|
MQ t; |
|
Q q; |
|
|
|
if ( !a ) |
|
*c = 0; |
|
else if ( !current_gfs_ntoi ) { |
|
UTOMQ(CONT(a),t); |
|
STOQ(CONT(t),q); |
|
*c = (P)q; |
|
} else |
|
enc_to_p(current_gfs_p,current_gfs_iton[CONT(a)],v,c); |
|
} |
|
|
void ntogfs(Obj a,GFS *b) |
void ntogfs(Obj a,GFS *b) |
{ |
{ |
P t; |
P t; |
Line 944 int cmpgfs(GFS a,GFS b) |
|
Line 961 int cmpgfs(GFS a,GFS b) |
|
} |
} |
} |
} |
|
|
|
void pthrootgfs(GFS a,GFS *b) |
|
{ |
|
Q p; |
|
int e,i; |
|
GFS t,s; |
|
|
|
STOQ(characteristic_sf(),p); |
|
e = extdeg_sf()-1; |
|
t = a; |
|
for ( i = 0; i < e; i++ ) { |
|
pwrgfs(t,p,&s); t = s; |
|
} |
|
*b = t; |
|
} |
|
|
void randomgfs(GFS *r) |
void randomgfs(GFS *r) |
{ |
{ |
unsigned int t; |
unsigned int t; |
Line 1117 int _itosf(int n) |
|
Line 1149 int _itosf(int n) |
|
{ |
{ |
int i; |
int i; |
|
|
|
/* XXX */ |
|
#if 0 |
n %= current_gfs_p; |
n %= current_gfs_p; |
|
#else |
|
n %= current_gfs_q; |
|
#endif |
if ( !n ) |
if ( !n ) |
return 0; |
return 0; |
i = !current_gfs_ntoi ? n : current_gfs_ntoi[n]; |
i = !current_gfs_ntoi ? n : current_gfs_ntoi[n]; |