version 1.2, 2000/08/21 08:31:28 |
version 1.6, 2015/08/14 13:51:55 |
|
|
* shall be made on your publication or presentation in any form of the |
* shall be made on your publication or presentation in any form of the |
* results obtained by use of the SOFTWARE. |
* results obtained by use of the SOFTWARE. |
* (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
* (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
* e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification |
* e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification |
* for such modification or the source code of the modified part of the |
* for such modification or the source code of the modified part of the |
* SOFTWARE. |
* SOFTWARE. |
* |
* |
|
|
* 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/up_gf2n.c,v 1.1.1.1 1999/12/03 07:39:08 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/up_gf2n.c,v 1.5 2015/08/08 14:19:41 fujimoto Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include <math.h> |
#include <math.h> |
Line 54 extern int debug_up; |
|
Line 54 extern int debug_up; |
|
extern int up_lazy; |
extern int up_lazy; |
extern GEN_UP2 current_mod_gf2n; |
extern GEN_UP2 current_mod_gf2n; |
|
|
void squarep_gf2n(vl,n1,nr) |
void squarep_gf2n(VL vl,P n1,P *nr) |
VL vl; |
|
P n1; |
|
P *nr; |
|
{ |
{ |
UP b1,br; |
UP b1,br; |
|
|
|
|
} |
} |
} |
} |
|
|
void squareup_gf2n(n1,nr) |
void squareup_gf2n(UP n1,UP *nr) |
UP n1; |
|
UP *nr; |
|
{ |
{ |
UP r; |
UP r; |
GF2N *c1,*c; |
GF2N *c1,*c; |
|
|
|
|
/* x^(2^n) mod f */ |
/* x^(2^n) mod f */ |
|
|
void powermodup_gf2n(f,xp) |
void powermodup_gf2n(UP f,UP *xp) |
UP f; |
|
UP *xp; |
|
{ |
{ |
UP x,t,invf; |
UP x,t,invf; |
int k,n; |
int k,n; |
GF2N lm; |
GF2N lm; |
struct oEGT eg_sq,eg_rem,eg_mul,eg_inv,eg0,eg1,eg2; |
|
|
|
n = degup2(current_mod_gf2n->dense); |
n = degup2(current_mod_gf2n->dense); |
MKGF2N(ONEUP2,lm); |
MKGF2N(ONEUP2,lm); |
|
|
|
|
/* g^d mod f */ |
/* g^d mod f */ |
|
|
void generic_powermodup_gf2n(g,f,d,xp) |
void generic_powermodup_gf2n(UP g,UP f,Q d,UP *xp) |
UP g,f; |
|
Q d; |
|
UP *xp; |
|
{ |
{ |
N e; |
N e; |
UP x,y,t,invf,s; |
UP x,y,t,invf,s; |
|
|
|
|
/* g+g^2+...+g^(2^(nd-1)) mod f; where e = deg(mod) */ |
/* g+g^2+...+g^(2^(nd-1)) mod f; where e = deg(mod) */ |
|
|
void tracemodup_gf2n(g,f,d,xp) |
void tracemodup_gf2n(UP g,UP f,Q d,UP *xp) |
UP g,f; |
|
Q d; |
|
UP *xp; |
|
{ |
{ |
UP x,t,s,u,invf; |
UP x,t,s,u,invf; |
int en,i; |
int en,i; |
|
|
*xp = s; |
*xp = s; |
} |
} |
|
|
void tracemodup_gf2n_slow(g,f,d,xp) |
void tracemodup_gf2n_slow(UP g,UP f,Q d,UP *xp) |
UP g,f; |
|
Q d; |
|
UP *xp; |
|
{ |
{ |
UP x,t,s,u; |
UP x,t,s,u; |
int en,i; |
int en,i; |
|
|
*xp = s; |
*xp = s; |
} |
} |
|
|
static struct oEGT eg_trace_tab,eg_trace_mul; |
void tracemodup_gf2n_tab(UP g,UP f,Q d,UP *xp) |
|
|
void tracemodup_gf2n_tab(g,f,d,xp) |
|
UP g,f; |
|
Q d; |
|
UP *xp; |
|
{ |
{ |
UP x0,x2,t,s,u; |
UP x0,x2,t,s,u; |
int en,i; |
int en,i; |
UP *tab; |
UP *tab; |
GF2N one; |
GF2N one; |
struct oEGT eg1,eg2; |
|
|
|
en = QTOS(d)*degup2(current_mod_gf2n->dense); |
en = QTOS(d)*degup2(current_mod_gf2n->dense); |
remup(g,f,&t); g = t; |
remup(g,f,&t); g = t; |
|
|
*xp = s; |
*xp = s; |
} |
} |
|
|
void square_rem_tab_up_gf2n(f,tab,rp) |
void square_rem_tab_up_gf2n(UP f,UP *tab,UP *rp) |
UP f; |
|
UP *tab; |
|
UP *rp; |
|
{ |
{ |
UP s,t,u,n; |
UP s,t,u,n; |
Num *c; |
Num *c; |
|
|
} |
} |
} |
} |
|
|
void powertabup_gf2n(f,xp,tab) |
void powertabup_gf2n(UP f,UP xp,UP *tab) |
UP f; |
|
UP xp; |
|
UP *tab; |
|
{ |
{ |
UP y,t,invf; |
UP y,t,invf; |
int i,d; |
int i,d; |
|
|
invmodup(t,f->d,&invf); |
invmodup(t,f->d,&invf); |
|
|
for ( i = 2; i < d; i++ ) { |
for ( i = 2; i < d; i++ ) { |
if ( debug_up ) |
if ( debug_up ){ |
fprintf(stderr,"."); |
fprintf(stderr,"."); |
if ( !(i%2) ) |
} |
|
if ( !(i%2) ) |
squareup_gf2n(tab[i/2],&t); |
squareup_gf2n(tab[i/2],&t); |
else |
else |
kmulup(tab[i-1],xp,&t); |
kmulup(tab[i-1],xp,&t); |
rembymulup_special(t,f,invf,&tab[i]); |
rembymulup_special(t,f,invf,&tab[i]); |
/* remup(t,f,&tab[i]); */ |
/* remup(t,f,&tab[i]); */ |
} |
} |
} |
} |
|
|
void find_root_gf2n(f,r) |
void find_root_gf2n(UP f,GF2N *r) |
UP f; |
|
GF2N *r; |
|
{ |
{ |
UP g,ut,c,t,h,rem; |
UP g,ut,c,t,h,rem; |
int n; |
int n; |
GF2N rn; |
GF2N rn; |
struct oEGT eg0,eg1,eg_trace; |
|
|
|
n = degup2(current_mod_gf2n->dense); |
n = degup2(current_mod_gf2n->dense); |
g = f; |
g = f; |