-
Notifications
You must be signed in to change notification settings - Fork 189
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat/poseidon2 #553
Feat/poseidon2 #553
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I reviewed bls12-377 and the code-generated part. The other curves should be similar. I can tell it follows the paper, the spec and the reference implementation. I am not confident on my understanding on the linear layer analysis (https://tosc.iacr.org/index.php/ToSC/article/view/8913/8489) but as I said it follows the spec and other implementations so it should be good. t>=4 cases are yet to be merged here or pushed in a different PR but this one is good to go. Only one remark the Sbox can be code-generated per curve/field as in MiMC to make the code simpler. We need also to add poseidon2 to hash/hashes.go
.
Description
Implementation of poseidon2 for t=2,3 following
reference implementation
reference paper
TBD: algos 1, 2, 3 of https://tosc.iacr.org/index.php/ToSC/article/view/8913/8489 for finding internal matrices when t>3
Type of change
Please delete options that are not relevant.
How has this been benchmarked?
Please describe the benchmarks that you ran to verify your changes.
goarch: amd64
pkg: github.com/consensys/gnark-crypto/ecc/bn254/fr/poseidon2
cpu: Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
BenchmarkPoseidon2-12 163784 7035 ns/op
Checklist:
golangci-lint
does not output errors locally