In my Rust implementation of a messaging system, I'm using currently two cryptographic primitives: ed25519_dalek and x25519_dalek. I use ed25519_dalek for DSA, while x25519_dalek for encryption of the message since I need to do a Diffie-Hellman key exchange. I wonder whether I could use the same primitive for both DSA and DH, and if not why? Also, some time ago Signal described the XEd25519 signature schema https://signal.org/docs/specifications/xeddsa/ which they say "XEdDSA enables the use of a single key pair format for both elliptic curve Diffie-Hellman and signatures". What is the relation between those primitives, can I for example convert ed25519_dalek and x25519_dalek keys into XEd25519?