ronkathon icon indicating copy to clipboard operation
ronkathon copied to clipboard

bounty: Algorithm to find generator points

Open 0xJepsen opened this issue 9 months ago • 1 comments

Bounty Description

Implement a compile-time (const fn) algorithm to find generator points on elliptic curves so that we may have arbitrary generators used as compile-time constants in traits. Generator points are used to generate the cyclic subgroup used in various cryptographic protocols.

Implementation requirements

A clear and comprehensive list of the requirements for the bounty to be considered complete.

  • [ ] Implement a const function to find generator points on a given elliptic curve
    • Should accept curve parameters as input and utilize ronkathon's existing random point generation function / sqrt algorithm
  • [ ] Update traits that utilize generators to use this compile-time function
  • [ ] Implement proper error handling and input validation
  • [ ] Documentation and tests
    • Implement tests to verify the algorithm yields generators for small groups
    • Test for groups over extension fields as well as prime fields
    • Should verify that the point generates the entire group or a subgroup of desired order
    • Create comprehensive unit tests, e.g. with well-known curves (secp256k1, Curve25519)
    • Test edge cases and invalid inputs
    • Provide clear documentation and code commenting on the algorithm's operation and usage

Bonus Features

Any additional features that will enhance the value of the bounty.

  • [ ] Optimize the algorithm for efficiency:
    • Implement early termination conditions
    • Use efficient methods for scalar multiplication
    • Optimizations that may obfuscate understanding must be given as an optional feature

Resources

Elliptic Curve Cryptography: A Gentle Introduction Standards for Efficient Cryptography (SEC) 2: Recommended Elliptic Curve Domain Parameters Elliptic Curves for Security (RFC 7748) Handbook of Elliptic and Hyperelliptic Curve Cryptography, Chapter 9: Generating Elliptic Curves

Criteria

Bounties will be rewarded based on the following criteria:

  1. Correctness and security: A thorough review of the implementation should convince our team that they are correct and secure, with all requirements met.
  2. Code clarity and quality: Succinct, easy-to-follow code with appropriate naming conventions. Utilize Rust’s type system for flexibility and security (e.g., compile-time checks where possible), and avoid external crates. Optimizations should be a lower priority than clarity, but can be included behind a feature flag as a bonus.
  3. Documentation quality: Provide comprehensive README’s, Cargo docs, and inline comments where code itself is not self-explanatory. Prioritize clarity and readability.

0xJepsen avatar May 02 '24 00:05 0xJepsen