Well, they just don't have their individual type either: they are just `EVP_PKEY`s, with `EVP_PKEY` being the top level API in libcrypto for public key cryptography. The difference with `RSA_KEY`, `DSA_KEY`, `EC_KEY` (that can be encapsulated in a generic `EVP_PKEY` object) is that Ed* keys don't share a common module (apart from reusing common functions for parts of the ASN1 encoding/decoding). RSA, DSA and EC in libcrypto are submodules on their own, with a dedicated `{RSA,DSA,EC}_*` API, in part for legacy reasons. By the time X25519, Ed25519 and *448 were added, the new direction in the project was to minimise the size of the public API and recommend the use of the unified EVP API, so it did not make any sense to have a separate submodule with its own data types and API.
This is of course to the best of my knowledge and mostly based on guesses, as I was not actively contributing to the project while some of these decisions were made, and I don't have the same insight on the history of the design of the library as other project members. BR, Nicola On Sat, Mar 16, 2019, 17:00 Sam Roberts <vieuxt...@gmail.com> wrote: > That helps a lot, I can see why they are different enough from EC key > types to be distinct. > > It still leaves me wondering whe two edwards curves have key types > distinct from each other? Why aren't they both EVP_PKEY_ED? (or > something of the like) > > Cheers, > Sam >