ark-tom256 0.1.2

The Tom-256 curve
Documentation

Tom-256

This library implements the tom256 curve and is a copy of the secp256k1 implementation. Parameters source: https://neuromancer.sk/std/other/Tom-256# Paper: https://eprint.iacr.org/2021/1183

Curve information - in parentheses names from neuromancer.sk:

  • Base field: q (p) = secp: 115792089237316195423570985008687907852837564279074904382605163141518161494337 115792089210356248762697446949407573530594504085698471288169790229257723883799
  • Scalar field: r (n) = secp: 115792089237316195423570985008687907853269984665640564039457584007908834671663 115792089210356248762697446949407573530086143415290314195533631308867097853951
  • Curve equation a (a) = secp: 0 115792089210356248762697446949407573530594504085698471288169790229257723883796
  • Curve equation b (b) = secp: 7 81531206846337786915455327229510804132577517753388365729879493166393691077718
  • Base point G = secp: (55066263022277343669578718895168534326250603453777594175500187360389116729240, 32670510020758816978083085130507043184471273380659243275938904335757337482424) (3, 40902200210088653215032584946694356296222563095503428277299570638400093548589)
  • Curve equation: y2 = x3 + ax + b

Development

Setup

Run once after cloning to activate the git hooks (requires devbox):

devbox run setup

Testing

The R1CS constraint tests require the r1cs feature:

cargo test --features r1cs,zero-flag

Using this library in another project

The zero-flag feature (enabled by default) uses type ZeroFlag = () in the SWCurveConfig impl, which requires a patched version of ark-ec not yet released on crates.io.

With the patched ark-ec (recommended)

Add the same patch to your root Cargo.toml:

[patch.crates-io]
ark-ec = { git = "https://github.com/arkworks-rs/algebra" }

Then depend on this library normally:

[dependencies]
ark-tom256 = "..."

Without the patched ark-ec

Disable the default features to exclude zero-flag:

[dependencies]
ark-tom256 = { version = "...", default-features = false }

Re-enable any other default features you need (e.g. std):

ark-tom256 = { version = "...", default-features = false, features = ["std"] }

The curve-constraint-tests/ directory contains a vendored copy of ark-curve-constraint-tests from the arkworks algebra repository. It is not published on crates.io, so it is kept here to make the repository self-contained.

Thanks

Thanks to @lovesh (Lovesh Harchandani) for helping us with this.