7 static const fe sqrtm1
= {
11 int ge_frombytes_negate_vartime(ge_p3
*h
,const unsigned char *s
)
23 fe_sub(u
,u
,h
->Z
); /* u = y^2-1 */
24 fe_add(v
,v
,h
->Z
); /* v = dy^2+1 */
27 fe_mul(v3
,v3
,v
); /* v3 = v^3 */
30 fe_mul(h
->X
,h
->X
,u
); /* x = uv^7 */
32 fe_pow22523(h
->X
,h
->X
); /* x = (uv^7)^((q-5)/8) */
34 fe_mul(h
->X
,h
->X
,u
); /* x = uv^3(uv^7)^((q-5)/8) */
38 fe_sub(check
,vxx
,u
); /* vx^2-u */
39 if (fe_isnonzero(check
)) {
40 fe_add(check
,vxx
,u
); /* vx^2+u */
41 if (fe_isnonzero(check
)) return -1;
42 fe_mul(h
->X
,h
->X
,sqrtm1
);
45 if (fe_isnegative(h
->X
) == (s
[31] >> 7))
48 fe_mul(h
->T
,h
->X
,h
->Y
);