The implementing structs and traits for curves need to be revisited so that we can have high-level traits that cover all the possible curves.
There should be 4 of them.
- One for a Scalar
- One for a Private Key (which can be built from a Scalar)
- One for a (Curve) Point (which can be built from a Scalar)
- One for a PublicKey (which can be built from a Curve Point and a PrivateKey)
Also, let us try to use associated types and const as much as possible here since:
- these traits are linked
- const generics "leak" everywhere