circle-info
The documentation is currently being reviewed, so you may see some inconsistencies between sections.

Ed25519 to X25519

Purpose

Ed25519 keys can be converted to X25519 keys. This should ONLY be done under either of the following circumstances:

  • When you are forced to use the same key pair for key exchange and signing due to resource constraints (unlikely if using this library but possible on embedded devices).

  • When you only have access to signing keys.

For example, you could retrieve someone's Ed25519 SSH public key from GitHubarrow-up-right and use it as an X25519 public key for key exchange to encrypt a file for them.

triangle-exclamation

Usage

ComputeX25519PublicKey

Fills a span with the X25519 public key for a given Ed25519 public key.

Ed25519.ComputeX25519PublicKey(Span<byte> x25519PublicKey, ReadOnlySpan<byte> ed25519PublicKey)

Exceptions

ArgumentOutOfRangeExceptionarrow-up-right

x25519PublicKey has a length not equal to X25519.PublicKeySize.

ArgumentOutOfRangeExceptionarrow-up-right

ed25519PublicKey has a length not equal to Ed25519.PublicKeySize.

CryptographicExceptionarrow-up-right

Error computing X25519 public key.

ComputeX25519PrivateKey

Fills a span with the X25519 private key for a given Ed25519 private key.

Exceptions

ArgumentOutOfRangeExceptionarrow-up-right

x25519PrivateKey has a length not equal to X25519.PrivateKeySize.

ArgumentOutOfRangeExceptionarrow-up-right

ed25519PrivateKey has a length not equal to Ed25519.PrivateKeySize.

CryptographicExceptionarrow-up-right

Error computing X25519 private key.

Notes

circle-info

There has not been much research on using the same key pair for X25519 and Ed25519. However, it should be fine for an X25519-based KEMarrow-up-right. There is a nice summary of what a KEM is herearrow-up-right.

Last updated