Implement convert_ed25519_to_curve25519_public
Background: https://github.com/blueprint-freespeech/gosling/issues/81
So as part of the Gosling identity handshake, I verify the client actually controls the private x25519 key associated with the provided public x25519 client auth key. The current implementation converts the provided public x25519 key+signbit pair to an ed25519 public key and verifies a cryptographic signature made with the associated ed25519 private key derived from the client's x25519 private client auth key.
The x25519 -> ed25510 conversion is implementation-specific to arti's particular tor-llcrypto crate and isn't generally/concretely specified. So we would instead like to just communicate in terms of an ed25519 keypair and do the relevant 1-to-1 ed25519 -> x25519 conversion where needed, rather than the underspecified 1-to-2 x25519 -> ed25519 conversion.
ed25519_to_curve25519_private
has been implemented as part of !1297 (merged) but I still need ed25519_to_curve25519_public
to make the relevant protocol changes.
Thanks!