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[0],(byte)4);
Point B=wNAFMultiply(QP,ba[1],(byte)4);
if (ba[0].signum()==ba[1].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?