/* Galbraith & Scott Method */ public static BIG[] gs(BIG e) { int i, j; BIG t = new BIG(0); BIG q = new BIG(ROM.CURVE_Order); BIG[] u = new BIG[4]; BIG[] v = new BIG[4]; for (i = 0; i < 4; i++) { t.copy(new BIG(ROM.CURVE_WB[i])); DBIG d = BIG.mul(t, e); v[i] = new BIG(d.div(q)); u[i] = new BIG(0); } u[0].copy(e); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { t.copy(new BIG(ROM.CURVE_BB[j][i])); t.copy(BIG.modmul(v[j], t, q)); u[i].add(q); u[i].sub(t); u[i].mod(q); } } return(u); }
/* GLV method */ public static BIG[] glv(BIG e) { int i, j; BIG t = new BIG(0); BIG q = new BIG(ROM.CURVE_Order); BIG[] u = new BIG[2]; BIG[] v = new BIG[2]; for (i = 0; i < 2; i++) { t.copy(new BIG(ROM.CURVE_W[i])); // why not just t=new BIG(ROM.CURVE_W[i]); DBIG d = BIG.mul(t, e); v[i] = new BIG(d.div(q)); u[i] = new BIG(0); } u[0].copy(e); for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { t.copy(new BIG(ROM.CURVE_SB[j][i])); t.copy(BIG.modmul(v[j], t, q)); u[i].add(q); u[i].sub(t); u[i].mod(q); } } return(u); }