You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: book/src/background/curves.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -273,7 +273,7 @@ over $E_q/\mathbb{F}_q,$ forming a 2-cycle with the first:
273
273
274
274
### Pallas-Vesta curves
275
275
276
-
The Pallas and Vesta curves form a 2-cycle of elliptic curves designed specifically for Halo 2. They are defined over finite fields with highly 2-adic structure, meaning they have large multiplicative subgroups of order $2^S$ where $S = 32$.
276
+
The Pallas and Vesta curves form a 2-cycle of elliptic curves designed to allow efficient recursion in discrete-log-based proof systems such as Halo 2. They are defined over finite fields with highly 2-adic structure, meaning they have large multiplicative subgroups of order $2^S$, where in this case $S = 32$.
277
277
278
278
**Pallas curve ($E_p/\mathbb{F}_p$):**
279
279
- Base field: $\mathbb{F}_p$ where $p = 2^{254} + t_p$ and $t_p = 45560315531419706090280762371685220353$
@@ -309,7 +309,7 @@ framework used in the Internet Draft makes use of several functions:
309
309
310
310
The Simplified SWU (Shallue-van de Woestijne-Ulas) method is an efficient hash-to-curve algorithm that maps field elements to curve points. It is particularly well-suited for curves of the form $y^2 = x^3 + b$ where $b \neq 0$.
311
311
312
-
For a field element $u \in \mathbb{F}_p$, the Simplified SWU algorithm works as follows:
312
+
For a field element $u \in \mathbb{F}_p$, the core of the Simplified SWU algorithm works as follows:
313
313
314
314
1.**Precomputation**: Compute $Z = -b/A$ where $A$ is a non-square in $\mathbb{F}_p$
315
315
2.**Mapping**: For input $u$, compute:
@@ -325,6 +325,8 @@ For a field element $u \in \mathbb{F}_p$, the Simplified SWU algorithm works as
325
325
326
326
The result is the curve point $(x_i, y)$.
327
327
328
+
In practice for curves with $j$-invariant $0$ such as Pallas and Vesta, this algorithm cannot be used as-is. Instead we map $u$ to an isogenous curve with a non-zero $j$-invariant ("iso-Pallas" or "iso-Vesta"), and then apply the isogeny to give a point on the target curve. Also, the full hash-to-curve operation involves pre-hashing the input with domain separation, and adding the results of two such mappings to the target curve (or equivalently, adding them on the isogenous curve and then applying the isogeny). For full details see the [Sage reference implementation](https://github.com/zcash/pasta/blob/master/hashtocurve.sage).
329
+
328
330
This method is constant-time, deterministic, and provides a uniform distribution over the curve points. It is used in Halo 2 for various cryptographic operations including parameter generation and commitment schemes.
0 commit comments