From 85ef7631d2bb6f8f9358264e4d11f930411b4e68 Mon Sep 17 00:00:00 2001 From: Jazz Turner-Baggs <473256+jazzz@users.noreply.github.com> Date: Thu, 12 Feb 2026 16:03:05 -0800 Subject: [PATCH] Add X25519PrivateKey --- crypto/src/keys.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/crypto/src/keys.rs b/crypto/src/keys.rs index d95637d..01a6783 100644 --- a/crypto/src/keys.rs +++ b/crypto/src/keys.rs @@ -46,6 +46,27 @@ impl From<&X25519PublicKey> for xed25519::PublicKey { } } +#[derive(Clone, Zeroize, ZeroizeOnDrop)] +pub struct X25519PrivateKey(x25519_dalek::StaticSecret); + +impl X25519PrivateKey { + pub fn random_from_rng(csprng: T) -> Self { + Self(x25519_dalek::StaticSecret::random_from_rng(csprng)) + } + + //TODO: Remove. Force internal callers provide Rng to make deterministic testing possible + pub fn random() -> X25519PrivateKey { + Self::random_from_rng(&mut OsRng) + } +} + +impl Deref for X25519PrivateKey { + type Target = x25519_dalek::StaticSecret; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + /// A Generic secret key container for symmetric keys. /// SymmetricKey retains ownership of bytes to ensure they are Zeroized on drop. #[derive(Clone, Zeroize, ZeroizeOnDrop, PartialEq)]