diff --git a/crates/cashu/src/nuts/nut00.rs b/crates/cashu/src/nuts/nut00.rs index 74d26597..16e4a839 100644 --- a/crates/cashu/src/nuts/nut00.rs +++ b/crates/cashu/src/nuts/nut00.rs @@ -184,6 +184,33 @@ pub mod wallet { Ok(PreMintSecrets { secrets: output }) } + pub fn from_secrets( + keyset_id: Id, + amounts: Vec, + secrets: Vec, + ) -> Result { + 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_message = BlindedMessage { + amount, + b: blinded, + keyset_id, + }; + + output.push(PreMint { + secret, + blinded_message, + r: r.into(), + amount, + }); + } + + Ok(PreMintSecrets { secrets: output }) + } + /// Blank Outputs used for NUT-08 change pub fn blank(keyset_id: Id, fee_reserve: Amount) -> Result { let count = ((u64::from(fee_reserve) as f64).log2().ceil() as u64).max(1);