From 7de2413dc0396481b0f28bd6f07f778fc2ecfaf4 Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Sat, 10 Feb 2024 14:44:01 +0000 Subject: [PATCH] refactor: secret as hex bytes --- crates/cashu/src/dhke.rs | 8 +++++--- crates/cashu/src/error.rs | 4 ++++ crates/cashu/src/nuts/nut00.rs | 9 +++++---- crates/cashu/src/secret.rs | 6 ++++-- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/crates/cashu/src/dhke.rs b/crates/cashu/src/dhke.rs index e5286f3c..59b71159 100644 --- a/crates/cashu/src/dhke.rs +++ b/crates/cashu/src/dhke.rs @@ -6,7 +6,7 @@ pub use mint::{sign_message, verify_message}; #[cfg(feature = "wallet")] pub use wallet::{blind_message, construct_proofs, unblind_message}; -fn hash_to_curve(message: &[u8]) -> k256::PublicKey { +pub fn hash_to_curve(message: &[u8]) -> k256::PublicKey { let mut msg_to_hash = message.to_vec(); loop { @@ -130,7 +130,7 @@ mod mint { msg: &Secret, ) -> Result<(), error::mint::Error> { // Y - let y = hash_to_curve(msg.as_bytes()); + let y = hash_to_curve(&msg.to_bytes()?); if unblinded_message == k256::PublicKey::try_from(*y.as_affine() * Scalar::from(a.as_scalar_primitive()))? @@ -144,6 +144,8 @@ mod mint { #[cfg(test)] mod tests { + use core::panic; + use hex::decode; use k256::elliptic_curve::scalar::ScalarPrimitive; @@ -349,7 +351,7 @@ mod tests { let x = Secret::new(); // Y - let y = hash_to_curve(x.as_bytes()); + let y = hash_to_curve(&x.to_bytes().unwrap()); // B_ let blinded = blind_message(&y.to_sec1_bytes(), None).unwrap(); diff --git a/crates/cashu/src/error.rs b/crates/cashu/src/error.rs index b9df9ed8..6f805aed 100644 --- a/crates/cashu/src/error.rs +++ b/crates/cashu/src/error.rs @@ -69,6 +69,8 @@ pub mod wallet { /// Url Parse error #[error("Url Parse")] UrlParse, + #[error("`{0}`")] + Secret(#[from] crate::secret::Error), /// Custom Error message #[error("`{0}`")] CustomError(String), @@ -110,6 +112,8 @@ pub mod mint { #[error("Unknown Keyset")] UnknownKeySet, #[error("`{0}`")] + Secret(#[from] crate::secret::Error), + #[error("`{0}`")] CustomError(String), } } diff --git a/crates/cashu/src/nuts/nut00.rs b/crates/cashu/src/nuts/nut00.rs index 16e4a839..813dcdc8 100644 --- a/crates/cashu/src/nuts/nut00.rs +++ b/crates/cashu/src/nuts/nut00.rs @@ -165,7 +165,7 @@ pub mod wallet { for amount in amount_split { let secret = Secret::new(); - let (blinded, r) = blind_message(secret.as_bytes(), None)?; + let (blinded, r) = blind_message(&secret.to_bytes()?, None)?; let blinded_message = BlindedMessage { amount, @@ -192,7 +192,7 @@ pub mod wallet { let mut output = Vec::with_capacity(secrets.len()); for (secret, amount) in secrets.into_iter().zip(amounts) { - let (blinded, r) = blind_message(secret.as_bytes(), None)?; + let (blinded, r) = blind_message(&secret.to_bytes()?, None)?; let blinded_message = BlindedMessage { amount, @@ -219,7 +219,7 @@ pub mod wallet { for _i in 0..count { let secret = Secret::new(); - let (blinded, r) = blind_message(secret.as_bytes(), None)?; + let (blinded, r) = blind_message(&secret.to_bytes()?, None)?; let blinded_message = BlindedMessage { amount: Amount::ZERO, @@ -255,7 +255,8 @@ pub mod wallet { let secret = Secret::from_seed(mnemonic, keyset_id, counter); let blinding_factor = SecretKey::from_seed(mnemonic, keyset_id, counter); - let (blinded, r) = blind_message(secret.as_bytes(), Some(blinding_factor.into()))?; + let (blinded, r) = + blind_message(&secret.to_bytes()?, Some(blinding_factor.into()))?; let blinded_message = BlindedMessage { keyset_id, diff --git a/crates/cashu/src/secret.rs b/crates/cashu/src/secret.rs index b089d1f8..f8ed169a 100644 --- a/crates/cashu/src/secret.rs +++ b/crates/cashu/src/secret.rs @@ -18,6 +18,8 @@ pub struct Secret(String); pub enum Error { #[error("Invalid secret length: `{0}`")] InvalidLength(u64), + #[error("Hex error: `{0}`")] + Hex(#[from] hex::FromHexError), } impl Default for Secret { @@ -56,8 +58,8 @@ impl Secret { Self(hex::encode(xpriv.private_key().to_bytes())) } - pub fn as_bytes(&self) -> &[u8] { - self.0.as_bytes() + pub fn to_bytes(&self) -> Result, Error> { + Ok(hex::decode(&self.0)?) } }