fld-ecc-vec
fld-ecc-vec copied to clipboard
Making E(Fp) point operations public
As far as I can see, there is currently no public interface for $E(\mathbb{F}_p)$ Point operations, but this is a highly desirable feature alongside the excellent $\mathbb{F}p$ API, and the ECDH and ECDSA APIs. Here are some applications that need e.g. (scalar) point multiplications:
- Computing Pedersen Commitments over Elliptic Curves, one needs to compute $Com(s, r) := sA + rB$ where $s \in \mathbb{F}_p$ is a (small) message, and $r \in \mathbb{F}_p$ is for blinding.
- For longer messages $(m = s_1 || s_2 || ... || s_n)$, one computes Pedersen Commitments as $Com(m, r) := s_1A_1 + s_2A_2 + ... + s_nA_n + rB$
- Implementing a Seed-Homomorphic PRG, one selects n random points $P_1 \cdots P_n$ as fixed system parameters, and then on input $s \in \mathbb{F}_p$, one computes $PRG(s) := (sP_1, sP_2, \cdots, sP_n)$. Of course, precomputation for those (fixed) points would be a good idea too, since the $P_i$ are being reused all the time for many different seeds $s$.
While Seed-Homomorphic PRGs are not that common (but useful), Pedersen Commitments are hugely popular. In general, computing $(s_1P_1 + s_2P_2 + ... + s_nP_n)$ is needed in many cryptographic applications.
Sadly, functions like src:edwards255.c:point_multiplication_ed25519() are static for internal use only, and are hidden deeply inside the bowels of the library.