Use Rust for starknet sign/verify/pedersen #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
sign/verify/pedersenfunctions are CPU intensive and the current implementation uses https://github.com/indutny/elliptic which is very slow in JS.Solution
I took a look at what we can do to improve this and there seem to be several options:
src/starkware/in Rust with https://github.com/RustCrypto/traits/tree/master/elliptic-curve and write our own bindingsI chose option 2. as the repo is seriously maintained, has better performance and portability than starknet-cpp, and was way easier than rewriting our own stark curve.
Results ⚡
signtook 200ms before vs 1ms now -> 200x fasterverifytook 1000ms before vs 3ms now -> 333x fasterMore serious benchmark can be done but overall it's way faster!
TODO