Pasta curves (Pallas/Vesta) — formal verification source
Find a file
Alex Xiong ba38386100
Add tests for DeferredField trait
Test the accumulation-based API for both Fp and Fq: single
mul/square round-trips, inner products at various lengths (0–10,000),
reduce-zero identity, square-vs-mul consistency, mixed mul+square
accumulation, and a regression test with adversarial limb values that
exercise the partial-reduction path.

All tests are written against the DeferredField trait API and will
continue to pass when the eager accumulator is swapped for a lazy one.
2026-04-08 14:48:10 +08:00
.github CI: Updates to test MSRV correctly 2025-04-16 19:19:42 +00:00
benches Add benchmarks for point operations. 2021-08-11 15:09:34 +01:00
book book: Fix broken links 2021-03-04 14:02:12 +00:00
src Add tests for DeferredField trait 2026-04-08 14:48:10 +08:00
.gitignore CI: Updates to test MSRV correctly 2025-04-16 19:19:42 +00:00
Cargo.lock CI: Updates to test MSRV correctly 2025-04-16 19:19:42 +00:00
Cargo.toml Introduce DeferredField trait with eager implementations 2026-04-08 14:47:20 +08:00
CHANGELOG.md Raise MSRV to 1.63 2025-04-16 19:19:42 +00:00
COPYING.md Ensure that GitHub's "View license" link points to complete license information. 2022-01-04 17:30:00 +00:00
katex-header.html Initial commit 2020-08-22 14:15:39 -06:00
LICENSE-APACHE Relicense pasta_curves as MIT OR Apache-2.0 2021-09-17 16:32:36 +01:00
LICENSE-MIT Relicense pasta_curves as MIT OR Apache-2.0 2021-09-17 16:32:36 +01:00
README.md Raise MSRV to 1.63 2025-04-16 19:19:42 +00:00
rust-toolchain.toml Raise MSRV to 1.63 2025-04-16 19:19:42 +00:00

pasta_curves

This crate provides an implementation of the Pasta elliptic curve constructions, Pallas and Vesta. More details about the Pasta curves can be found in this blog post.

RFC process

This crate follows the zkcrypto RFC process. If you want to propose "substantial" changes to this crate, please create an RFC for wider discussion.

Documentation

Minimum Supported Rust Version

Requires Rust 1.63 or higher.

Minimum supported Rust version can be changed in the future, but it will be done with a minor version bump.

Curve Descriptions

  • Pallas: y2 = x3 + 5 over GF(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001).

  • Vesta: y2 = x3 + 5 over GF(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001).

The Pasta curves form a cycle with one another: the order of each curve is exactly the base field of the other. This property is critical to the efficiency of recursive proof systems. They are designed to be highly 2-adic, meaning that a large power-of-two multiplicative subgroup exists in each field. This is important for the performance of polynomial arithmetic over their scalar fields and is essential for protocols similar to PLONK.

These curves can be reproducibly obtained using a curve search utility weve published.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.