Skip to content

Commit 2343923

Browse files
committed
Use ChaCha20Rng instead of CrappyRng
1 parent 19e40ae commit 2343923

File tree

11 files changed

+19
-90
lines changed

11 files changed

+19
-90
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ elementsd = {version = "0.6.0", features=["0_21_0","bitcoind_22_0"], optional =
4242

4343
[dev-dependencies]
4444
rand = "0.8"
45+
rand_chacha = "0.3"
4546
serde_test = "1.0"
4647
serde_json = "1.0"
4748
serde_cbor = "0.8" # older than latest version to support 1.41.1

examples/pset_blind_coinjoin.rs

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use elements::{pset, secp256k1_zkp};
2727
use elements::encode::{deserialize, serialize_hex};
2828
use elements::hashes::hex::FromHex;
2929
use elements::{confidential, AssetId, TxOut};
30+
use rand::SeedableRng;
3031

3132
// Assume txouts are simple pay to wpkh
3233
// and keep the secrets correponding to
@@ -137,7 +138,10 @@ fn main() {
137138
let tests = test_data();
138139
// Initially secp context and rng global state
139140
let secp = secp256k1_zkp::Secp256k1::new();
140-
let mut rng = CrappyRng::new(core::num::NonZeroU64::new(1).unwrap());
141+
142+
// NOTE: Zero is not a reasonable seed for production code.
143+
// It is used here so that we can match test vectors.
144+
let mut rng = rand_chacha::ChaCha20Rng::from_seed([0u8; 32]);
141145

142146
let txouts = txout_data();
143147
let (btc_txout, btc_txout_secrets, btc_inp) = txouts[0].clone();
@@ -285,43 +289,3 @@ fn main() {
285289
tx.verify_tx_amt_proofs(&secp, &[btc_txout, asset_txout])
286290
.unwrap();
287291
}
288-
289-
290-
/// Xorshift
291-
pub struct CrappyRng(u64);
292-
293-
impl CrappyRng {
294-
fn new(initial: core::num::NonZeroU64) -> Self {
295-
Self(initial.get())
296-
}
297-
}
298-
299-
impl rand::RngCore for CrappyRng {
300-
301-
fn next_u32(&mut self) -> u32 {
302-
self.next_u64() as u32
303-
}
304-
305-
fn next_u64(&mut self) -> u64 {
306-
let mut x = self.0;
307-
x ^= x << 13;
308-
x ^= x >> 7;
309-
x ^= x << 17;
310-
self.0 = x;
311-
x
312-
}
313-
314-
fn fill_bytes(&mut self, dest: &mut [u8]) {
315-
for chunk in dest.chunks_mut(8) {
316-
let x = self.next_u64().to_be_bytes();
317-
chunk.copy_from_slice(&x[..chunk.len()]);
318-
319-
}
320-
}
321-
322-
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand::Error> {
323-
Ok(self.fill_bytes(dest))
324-
}
325-
}
326-
327-
impl rand::CryptoRng for CrappyRng {}

examples/raw_blind.rs

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use elements::{pset, secp256k1_zkp};
1515
use elements::encode::{deserialize, serialize_hex};
1616
use elements::hashes::hex::FromHex;
1717
use elements::{confidential, AssetId, TxOut};
18+
use rand::SeedableRng;
1819

1920
/// Pset example workflow:
2021
/// Simple transaction spending a confidential asset
@@ -138,7 +139,10 @@ fn main() {
138139
let tests = test_data();
139140
// Initially secp context and rng global state
140141
let secp = secp256k1_zkp::Secp256k1::new();
141-
let mut rng = CrappyRng::new(core::num::NonZeroU64::new(1).unwrap());
142+
143+
// NOTE: Zero is not a reasonable seed for production code.
144+
// It is used here so that we can match test vectors.
145+
let mut rng = rand_chacha::ChaCha20Rng::from_seed([0u8; 32]);
142146

143147
let txouts = txout_data();
144148
let (btc_txout, btc_txout_secrets, btc_inp) = txouts[0].clone();
@@ -318,43 +322,3 @@ fn main() {
318322
let tx = pset.extract_tx().unwrap();
319323
assert_eq!(serialize_hex(&tx), tests["extracted_tx"]);
320324
}
321-
322-
323-
/// Xorshift
324-
pub struct CrappyRng(u64);
325-
326-
impl CrappyRng {
327-
fn new(initial: core::num::NonZeroU64) -> Self {
328-
Self(initial.get())
329-
}
330-
}
331-
332-
impl rand::RngCore for CrappyRng {
333-
334-
fn next_u32(&mut self) -> u32 {
335-
self.next_u64() as u32
336-
}
337-
338-
fn next_u64(&mut self) -> u64 {
339-
let mut x = self.0;
340-
x ^= x << 13;
341-
x ^= x >> 7;
342-
x ^= x << 17;
343-
self.0 = x;
344-
x
345-
}
346-
347-
fn fill_bytes(&mut self, dest: &mut [u8]) {
348-
for chunk in dest.chunks_mut(8) {
349-
let x = self.next_u64().to_be_bytes();
350-
chunk.copy_from_slice(&x[..chunk.len()]);
351-
352-
}
353-
}
354-
355-
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand::Error> {
356-
Ok(self.fill_bytes(dest))
357-
}
358-
}
359-
360-
impl rand::CryptoRng for CrappyRng {}

examples/test_vector/pset_blind_coinjoin/pset_coinjoined_B_blinded.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

examples/test_vector/pset_blind_coinjoin/pset_coinjoined_blinded.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

examples/test_vector/raw_blind/blinded_one_inp_signed.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

examples/test_vector/raw_blind/blinded_signed.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

examples/test_vector/raw_blind/blinded_unsigned.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

examples/test_vector/raw_blind/extracted_tx.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

examples/test_vector/raw_blind/finalized.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)