#fpga #elliptic-curve #msm

bin+lib cyclone-msm

FPGA-accelerated multi-scalar multiplication

1 unstable release

0.1.0-pre Dec 21, 2022

#1454 in Cryptography

Apache-2.0 OR MIT

64KB
1.5K SLoC

cyclone-msm

Assuming the FPGA image is loaded with make reset.

Note that this image agfi-09bec09a9e2b4d332 has a fix to enable reading out points without DRAM, compared to the image agfi-0d25a1d127f1b497f of the ZPrize submission.

Quickstart

# install the demo binaries
RUSTFLAGS='-C target-feature=+avx2' cargo install --features demo --git https://github.com/jumpcrypto/cyclone cyclone-msm

# load the FPGA image
sudo fpga-load-local-image -S 0 -I agfi-09bec09a9e2b4d332

# configure the demo (SIZE can be up to 26)
SIZE=16 LOCATION=/tmp/example-points-$SIZE
CYCLONE=$(command -v cyclone-msm)

# make some points
$CYCLONE $SIZE $LOCATION points

# load the points
sudo $CYCLONE $SIZE $LOCATION load

# run a random MSM on these points
sudo $CYCLONE --preloaded $SIZE $LOCATION msm

Development

Default SIZE=16.

  • make points SIZE=<SIZE> generates files size<SIZE>.beta and size<SIZE>.points.
  • make column SIZE=<SIZE> calculates a column MSM using these points.
  • make msm SIZE=<SIZE> calculates a full 16 column MSM using these points.

You can also skip loading points in the column and msm targes:

  • make load SIZE=<SIZE> generates files size<SIZE>.beta and size<SIZE>.points.
  • make column-pre SIZE=<SIZE> calculates a column MSM using these points.
  • make msm-pre SIZE=<SIZE> calculates a full 16 column MSM using these points.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~7.5MB
~145K SLoC