void init_vars() { ec = EllipticCurve(23, 1, 1, 28); P = Point(3, 10); Q = Point(9, 7); point_at_infinity(Inf); //Inf = Point(-1, -1); }
void SamplePointFromBytes(EC2 *point, BYTE* input, int inbytelen) { Big bigtmp; bytes_to_big (inbytelen, (const char*) input, bigtmp.getbig());//(bigtmp, inbytelen, input); premult(bigtmp.getbig(), MAXMSGSAMPLE, bigtmp.getbig()); for(int i = 0; i < MAXMSGSAMPLE; i++) { *point = EC2(bigtmp, 0); if(!point_at_infinity(point->get_point())) return; *point = EC2(bigtmp, 1); if(!point_at_infinity(point->get_point())) return; incr(bigtmp.getbig(), 1, bigtmp.getbig()); } cerr << "Error while sampling point, exiting!" << endl; exit(0); }
void BaseOT::SampleRandomPoint(ECn *point, int field_size) { Big bigtmp; int itmp = rand()%2; do { bigtmp = rand(field_size, 2); *point = ECn(bigtmp, itmp); } while (point_at_infinity(point->get_point())); }
void SampleRandomPoint(ECn &point, fparams* params) { Big bigtmp; int itmp = rand()%2; do { bigtmp = rand(params->secparam, 2); point = ECn(bigtmp, itmp); } while (point_at_infinity(point.get_point())); }
int main() { FILE *fp; int ep,bits; epoint *g,*w; big a,b,p,q,x,y,d; long seed; miracl instance; miracl *mip=&instance; char mem[MR_BIG_RESERVE(7)]; /* reserve space on the stack for 7 bigs */ char mem1[MR_ECP_RESERVE(2)]; /* and two elliptic curve points */ memset(mem,0,MR_BIG_RESERVE(7)); memset(mem1,0,MR_ECP_RESERVE(2)); #ifndef MR_EDWARDS fp=fopen("common.ecs","rt"); if (fp==NULL) { printf("file common.ecs does not exist\n"); return 0; } fscanf(fp,"%d\n",&bits); #else fp=fopen("edwards.ecs","rt"); if (fp==NULL) { printf("file edwards.ecs does not exist\n"); return 0; } fscanf(fp,"%d\n",&bits); #endif mirsys(mip,bits/4,16); /* Use Hex internally */ a=mirvar_mem(mip,mem,0); b=mirvar_mem(mip,mem,1); p=mirvar_mem(mip,mem,2); q=mirvar_mem(mip,mem,3); x=mirvar_mem(mip,mem,4); y=mirvar_mem(mip,mem,5); d=mirvar_mem(mip,mem,6); innum(mip,p,fp); innum(mip,a,fp); innum(mip,b,fp); innum(mip,q,fp); innum(mip,x,fp); innum(mip,y,fp); fclose(fp); /* randomise */ printf("Enter 9 digit random number seed = "); scanf("%ld",&seed); getchar(); irand(mip,seed); ecurve_init(mip,a,b,p,MR_PROJECTIVE); /* initialise curve */ g=epoint_init_mem(mip,mem1,0); w=epoint_init_mem(mip,mem1,1); if (!epoint_set(mip,x,y,0,g)) /* initialise point of order q */ { printf("Problem - point (x,y) is not on the curve\n"); exit(0); } ecurve_mult(mip,q,g,w); if (!point_at_infinity(w)) { printf("Problem - point (x,y) is not of order q\n"); exit(0); } /* generate public/private keys */ bigrand(mip,q,d); ecurve_mult(mip,d,g,g); ep=epoint_get(mip,g,x,x); /* compress point */ printf("public key = %d ",ep); otnum(mip,x,stdout); fp=fopen("public.ecs","wt"); fprintf(fp,"%d ",ep); otnum(mip,x,fp); fclose(fp); fp=fopen("private.ecs","wt"); otnum(mip,d,fp); fclose(fp); /* clear all memory used */ memset(mem,0,MR_BIG_RESERVE(7)); memset(mem1,0,MR_ECP_RESERVE(2)); return 0; }
JNIEXPORT jboolean JNICALL Java_edu_biu_scapi_primitives_dlog_miracl_ECF2mPointMiracl_checkInfinityF2m (JNIEnv *env, jobject obj, jlong point){ return point_at_infinity((epoint*)point); }