ec subtract

Markus Teich teichm at
Thu Jul 17 15:01:39 CEST 2014

NIIBE Yutaka wrote:
>     Xi = [ri](Zi+1 - Zi-1)
>     one point subtraction and one scalar multiplication of point
> into:
>     Xi = [ri]Zi+1 + [-ri]Zi-1
>     two scalar multiplications of point and one point addition


this seems pretty straight forward, here is what I came up with:

	gotr_ecbd_gen_X_value(gcry_mpi_point_t* ret, const gcry_mpi_point_t succ,
	                      const gcry_mpi_point_t pred, const gcry_mpi_t priv)
		gcry_mpi_t tmp = gcry_mpi_new(0);
		gcry_mpi_point_t tmpoint = gcry_mpi_point_new(0);
		gotr_assert(succ && pred && priv);
		*ret = gcry_mpi_point_new(0);
		gcry_mpi_ec_mul(*ret, priv, succ, ctx);
		gcry_mpi_sub(tmp, tmp, priv);
		gcry_mpi_ec_mul(tmpoint, tmp, pred, ctx);
		gcry_mpi_ec_add(*ret, *ret, tmpoint, ctx);

with ctx beeing a file-static gcry_ctx_t:

	gcry_mpi_ec_new(&ctx, NULL, "Ed25519");

Any further suggestions?


More information about the Gcrypt-devel mailing list