| version 1.1, 2018/09/19 05:45:05 |
version 1.2, 2018/09/28 08:20:27 |
|
|
| * 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: OpenXM_contrib2/asir2018/builtin/ec.c,v 1.1 2018/09/19 05:45:05 noro Exp $ |
| */ |
*/ |
| #include "ca.h" |
#include "ca.h" |
| #include "parse.h" |
#include "parse.h" |
| Line 211 void Pecm_count_order(NODE arg,Z *rp) |
|
| Line 211 void Pecm_count_order(NODE arg,Z *rp) |
|
| getmod_lm(&p); |
getmod_lm(&p); |
| if ( z_bits((Q)p) > 32 ) |
if ( z_bits((Q)p) > 32 ) |
| error("ecm_count_order : ground field too large"); |
error("ecm_count_order : ground field too large"); |
| p0 = QTOS(p); |
p0 = ZTOS(p); |
| ec = (VECT)ARG0(arg); |
ec = (VECT)ARG0(arg); |
| vb = (Obj *)BDY(ec); simp_ff(vb[0],&a); simp_ff(vb[1],&b); |
vb = (Obj *)BDY(ec); simp_ff(vb[0],&a); simp_ff(vb[1],&b); |
| a0 = LMTOS((LM)a); |
a0 = LMTOS((LM)a); |
| b0 = LMTOS((LM)b); |
b0 = LMTOS((LM)b); |
| ord = ecm_count_order_gfp(p0,a0,b0); |
ord = ecm_count_order_gfp(p0,a0,b0); |
| UTOQ(ord,*rp); |
UTOZ(ord,*rp); |
| break; |
break; |
| case FF_GF2N: |
case FF_GF2N: |
| getmod_gf2n(&d); |
getmod_gf2n(&d); |
| Line 226 void Pecm_count_order(NODE arg,Z *rp) |
|
| Line 226 void Pecm_count_order(NODE arg,Z *rp) |
|
| ec = (VECT)ARG0(arg); |
ec = (VECT)ARG0(arg); |
| vb = (Obj *)BDY(ec); simp_ff(vb[0],&a); simp_ff(vb[1],&b); |
vb = (Obj *)BDY(ec); simp_ff(vb[0],&a); simp_ff(vb[1],&b); |
| ord = ecm_count_order_gf2n(d,(GF2N)a,(GF2N)b); |
ord = ecm_count_order_gf2n(d,(GF2N)a,(GF2N)b); |
| UTOQ(ord,*rp); |
UTOZ(ord,*rp); |
| break; |
break; |
| default: |
default: |
| error("ecm_count_order : current_ff is not set"); |
error("ecm_count_order : current_ff is not set"); |
| Line 236 void Pecm_count_order(NODE arg,Z *rp) |
|
| Line 236 void Pecm_count_order(NODE arg,Z *rp) |
|
| void Pecm_set_addcounter(NODE arg,Z *rp) |
void Pecm_set_addcounter(NODE arg,Z *rp) |
| { |
{ |
| if ( arg ) |
if ( arg ) |
| ecm_addcounter = QTOS((Q)ARG0(arg)); |
ecm_addcounter = ZTOS((Q)ARG0(arg)); |
| UTOQ(ecm_addcounter,*rp); |
UTOZ(ecm_addcounter,*rp); |
| } |
} |
| |
|
| void Pecm_compute_all_key_homo_ff(NODE arg,VECT *rp) |
void Pecm_compute_all_key_homo_ff(NODE arg,VECT *rp) |
| Line 295 void Pnextvect1(NODE arg,Z *rp) |
|
| Line 295 void Pnextvect1(NODE arg,Z *rp) |
|
| int index; |
int index; |
| |
|
| index = nextvect1(ARG0(arg),ARG1(arg)); |
index = nextvect1(ARG0(arg),ARG1(arg)); |
| STOQ(index,*rp); |
STOZ(index,*rp); |
| } |
} |
| |
|
| /* XXX at least n < 32 must hold. What is the strict restriction for n ? */ |
/* XXX at least n < 32 must hold. What is the strict restriction for n ? */ |
| Line 315 void Pseparate_vect(NODE arg,LIST *rp) |
|
| Line 315 void Pseparate_vect(NODE arg,LIST *rp) |
|
| n = v->len; b = (Z *)v->body; |
n = v->len; b = (Z *)v->body; |
| w = (double *)ALLOCA(n*sizeof(double)); |
w = (double *)ALLOCA(n*sizeof(double)); |
| for ( i = 0; i < n; i++ ) |
for ( i = 0; i < n; i++ ) |
| w[i] = (double)QTOS(b[i]); |
w[i] = (double)ZTOS(b[i]); |
| s = separate_vect(w,n); |
s = separate_vect(w,n); |
| ns = nc = 0; |
ns = nc = 0; |
| for ( i = n-1; i >= 0; i-- ) |
for ( i = n-1; i >= 0; i-- ) |
| if ( s & (1<<i) ) { |
if ( s & (1<<i) ) { |
| STOQ(i,iq); MKNODE(t,iq,ns); ns = t; |
STOZ(i,iq); MKNODE(t,iq,ns); ns = t; |
| } else { |
} else { |
| STOQ(i,iq); MKNODE(t,iq,nc); nc = t; |
STOZ(i,iq); MKNODE(t,iq,nc); nc = t; |
| } |
} |
| MKLIST(ls,ns); MKLIST(lc,nc); |
MKLIST(ls,ns); MKLIST(lc,nc); |
| MKNODE(t,lc,0); MKNODE(t1,ls,t); |
MKNODE(t,lc,0); MKNODE(t1,ls,t); |
| Line 746 void ecm_find_match(unsigned int *g,int ng,unsigned in |
|
| Line 746 void ecm_find_match(unsigned int *g,int ng,unsigned in |
|
| for ( i = 0, c0 = 0; i < ng; i++ ) { |
for ( i = 0, c0 = 0; i < ng; i++ ) { |
| j = find_match(g[i],b,nb); |
j = find_match(g[i],b,nb); |
| if ( j >= 0 ) { |
if ( j >= 0 ) { |
| STOQ(i,iq); STOQ(j,jq); |
STOZ(i,iq); STOZ(j,jq); |
| MKNODE(n1,jq,0); MKNODE(n0,iq,n1); MKLIST(l,n0); |
MKNODE(n1,jq,0); MKNODE(n0,iq,n1); MKLIST(l,n0); |
| NEXTNODE(c0,c); |
NEXTNODE(c0,c); |
| BDY(c) = (pointer)l; |
BDY(c) = (pointer)l; |
| Line 785 int nextvect1(VECT vect,VECT bound) |
|
| Line 785 int nextvect1(VECT vect,VECT bound) |
|
| vb = (Z *)vect->body; |
vb = (Z *)vect->body; |
| bb = (Z *)bound->body; |
bb = (Z *)bound->body; |
| for ( i = size-1; i >= 0; i-- ) |
for ( i = size-1; i >= 0; i-- ) |
| if ( (a=QTOS(vb[i])) < QTOS(bb[i]) ) { |
if ( (a=ZTOS(vb[i])) < ZTOS(bb[i]) ) { |
| a++; STOQ(a,vb[i]); |
a++; STOZ(a,vb[i]); |
| break; |
break; |
| } else |
} else |
| vb[i] = 0; |
vb[i] = 0; |