I am experimenting with the GLV method but cannot manage to get the right results according to the literature.
I managed to find lambda, beta, split $K$ into $k_1$ and $k_2$ etc. for the curve I'm interested in.
According to the literature:
$$kP = k_1P + k_2\phi(P)$$
However, to get the right results, it seems to be needed to test if $k_1$ and $k_2$ are of the same sign, in which case a point addition should be applied. In the case of $k_1$ and $k_2$ being of different sings, one possibly needs to apply a subtraction.
Relevant part of code applying this method as is such:
BigInteger ba=splitK(k); Point QP=new Point(beta.multiply(Q.x).mod(FIELD),Q.y); Point A=wNAFMultiply(Q, ba,(byte)4); Point B=wNAFMultiply(QP,ba,(byte)4); if (ba.signum()==ba.signum()) // Where is this explained ???? return add(A,B); else return subtract(A,B);
It also follows that algo. 3.77 of the book “Guide to elliptic curve cryptography” probably does not work.
Am I missing something obvious?