Skip to content

Commit 9dc8a47

Browse files
committed
fix(stm): remove unnecessary tests on bincode/serde (de)serialization
1 parent bce39ee commit 9dc8a47

File tree

6 files changed

+51
-48
lines changed

6 files changed

+51
-48
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-stm/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ num-traits = { version = "0.2.19", optional = true }
4444
rug = { version = "1.28.0", optional = true }
4545

4646
[dev-dependencies]
47-
bincode = { version = "2.0.1", features = ["serde"] }
4847
criterion = { version = "0.7.0", features = ["html_reports"] }
4948
num-bigint = "0.4.6"
5049
num-rational = "0.4.2"

mithril-stm/src/aggregate_signature/mod.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -359,9 +359,6 @@ mod tests {
359359

360360
let bytes = initializer.to_bytes();
361361
assert!(Initializer::from_bytes(&bytes).is_ok());
362-
363-
let bytes = bincode::serde::encode_to_vec(&initializer, bincode::config::legacy()).unwrap();
364-
assert!(bincode::serde::decode_from_slice::<Initializer,_>(&bytes, bincode::config::legacy()).is_ok())
365362
}
366363

367364
#[test]
@@ -375,10 +372,6 @@ mod tests {
375372
let bytes = sig.to_bytes();
376373
let sig_deser = SingleSignature::from_bytes::<D>(&bytes).unwrap();
377374
assert!(sig_deser.verify(&params, &ps[0].get_verification_key(), &ps[0].get_stake(), &avk, &msg).is_ok());
378-
379-
let encoded = bincode::serde::encode_to_vec(&sig, bincode::config::legacy()).unwrap();
380-
let (decoded,_) = bincode::serde::decode_from_slice::<SingleSignature,_>(&encoded, bincode::config::legacy()).unwrap();
381-
assert!(decoded.verify(&params, &ps[0].get_verification_key(), &ps[0].get_stake(), &avk, &msg).is_ok());
382375
}
383376
}
384377

@@ -396,10 +389,6 @@ mod tests {
396389
let bytes: Vec<u8> = aggr.to_bytes();
397390
let aggr2 = AggregateSignature::from_bytes(&bytes).unwrap();
398391
assert!(aggr2.verify(&msg, &clerk.compute_aggregate_verification_key(), &params).is_ok());
399-
400-
let encoded = bincode::serde::encode_to_vec(&aggr, bincode::config::legacy()).unwrap();
401-
let (decoded,_) = bincode::serde::decode_from_slice::<AggregateSignature<D>,_>(&encoded, bincode::config::legacy()).unwrap();
402-
assert!(decoded.verify(&msg, &clerk.compute_aggregate_verification_key(), &params).is_ok());
403392
}
404393
}
405394
}

mithril-stm/src/bls_multi_signature/mod.rs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -225,15 +225,6 @@ mod tests {
225225
let vkpop_bytes = vkpop.to_bytes();
226226
let vkpop2: BlsVerificationKeyProofOfPossession = BlsVerificationKeyProofOfPossession::from_bytes(&vkpop_bytes).unwrap();
227227
assert_eq!(vkpop, vkpop2);
228-
229-
// Now we test serde
230-
let encoded = bincode::serde::encode_to_vec(vk, bincode::config::legacy()).unwrap();
231-
assert_eq!(encoded, vk_bytes);
232-
let (decoded,_) = bincode::serde::decode_from_slice::<BlsVerificationKey,_>(&encoded, bincode::config::legacy()).unwrap();
233-
assert_eq!(vk, decoded);
234-
let encoded = bincode::serde::encode_to_vec(vkpop, bincode::config::legacy()).unwrap();
235-
let (decoded,_) = bincode::serde::decode_from_slice::<BlsVerificationKeyProofOfPossession,_>(&encoded, bincode::config::legacy()).unwrap();
236-
assert_eq!(vkpop, decoded);
237228
}
238229

239230
#[test]
@@ -243,15 +234,6 @@ mod tests {
243234
let sk_bytes: [u8; 32] = sk.to_bytes();
244235
let sk2 = BlsSigningKey::from_bytes(&sk_bytes).unwrap();
245236
assert_eq!(sk, sk2);
246-
247-
// Now we test serde
248-
let encoded = bincode::serde::encode_to_vec(&sk, bincode::config::legacy()).unwrap();
249-
let (decoded,_) = bincode::serde::decode_from_slice::<BlsSigningKey,_>(&encoded, bincode::config::legacy()).unwrap();
250-
assert_eq!(sk, decoded);
251-
252-
// See that it is consistent with raw serialisation
253-
let (decoded_bytes,_) = bincode::serde::decode_from_slice::<BlsSigningKey,_>(&sk_bytes, bincode::config::legacy()).unwrap();
254-
assert_eq!(sk, decoded_bytes);
255237
}
256238

257239
#[test]

mithril-stm/src/merkle_tree/commitment.rs

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,25 @@ impl<D: Digest + FixedOutput> MerkleTreeCommitment<D> {
9393
{
9494
Self::concatenate_with_message(self, msg)
9595
}
96+
97+
/// Convert to bytes
98+
/// # Layout
99+
/// * Root of the Merkle commitment
100+
pub fn to_bytes(&self) -> Vec<u8> {
101+
let mut output = Vec::new();
102+
output.extend_from_slice(&self.root);
103+
output
104+
}
105+
106+
/// Extract a `MerkleTreeCommitment` from a byte slice.
107+
pub fn from_bytes(bytes: &[u8]) -> Result<MerkleTreeCommitment<D>, MerkleTreeError<D>> {
108+
let root = bytes.to_vec();
109+
110+
Ok(Self {
111+
root,
112+
hasher: PhantomData,
113+
})
114+
}
96115
}
97116

98117
/// Batch compatible `MerkleTree` commitment .
@@ -107,7 +126,7 @@ pub struct MerkleTreeBatchCommitment<D: Digest> {
107126
hasher: PhantomData<D>,
108127
}
109128

110-
impl<D: Digest> MerkleTreeBatchCommitment<D> {
129+
impl<D: Digest + FixedOutput> MerkleTreeBatchCommitment<D> {
111130
pub(crate) fn new(root: Vec<u8>, nr_leaves: usize) -> Self {
112131
Self {
113132
root,
@@ -254,6 +273,33 @@ impl<D: Digest> MerkleTreeBatchCommitment<D> {
254273
{
255274
Self::verify_leaves_membership_from_batch_path(self, batch_val, proof)
256275
}
276+
277+
/// Convert to bytes
278+
/// * Number of leaves as u64
279+
/// * Root of the Merkle commitment as bytes
280+
pub fn to_bytes(&self) -> Vec<u8> {
281+
let mut output = Vec::new();
282+
output.extend_from_slice(&u64::try_from(self.nr_leaves).unwrap().to_be_bytes());
283+
output.extend_from_slice(&self.root);
284+
285+
output
286+
}
287+
288+
/// Extract a `MerkleTreeBatchCommitment` from a byte slice.
289+
pub fn from_bytes(bytes: &[u8]) -> Result<MerkleTreeBatchCommitment<D>, MerkleTreeError<D>> {
290+
let mut u64_bytes = [0u8; 8];
291+
u64_bytes.copy_from_slice(bytes.get(..8).ok_or(MerkleTreeError::SerializationError)?);
292+
let nr_leaves = usize::try_from(u64::from_be_bytes(u64_bytes))
293+
.map_err(|_| MerkleTreeError::SerializationError)?;
294+
let mut root = Vec::new();
295+
root.extend_from_slice(bytes.get(8..).ok_or(MerkleTreeError::SerializationError)?);
296+
297+
Ok(MerkleTreeBatchCommitment {
298+
root,
299+
nr_leaves,
300+
hasher: PhantomData,
301+
})
302+
}
257303
}
258304

259305
impl<D: Digest> PartialEq for MerkleTreeBatchCommitment<D> {

mithril-stm/src/merkle_tree/tree.rs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -307,17 +307,13 @@ mod tests {
307307
let bytes = pf.to_bytes();
308308
let deserialised = MerklePath::from_bytes(&bytes).unwrap();
309309
assert!(t.to_merkle_tree_commitment().verify_leaf_membership_from_path(&values[i], &deserialised).is_ok());
310-
311-
let encoded = bincode::serde::encode_to_vec(&pf, bincode::config::legacy()).unwrap();
312-
let (decoded,_) = bincode::serde::decode_from_slice::<MerklePath<Blake2b<U32>>,_>(&encoded, bincode::config::legacy()).unwrap();
313-
assert!(t.to_merkle_tree_commitment().verify_leaf_membership_from_path(&values[i], &decoded).is_ok());
314310
})
315311
}
316312

317313
#[test]
318314
fn test_bytes_tree_commitment((t, values) in arb_tree(5)) {
319-
let encoded = bincode::serde::encode_to_vec(t.to_merkle_tree_commitment(), bincode::config::legacy()).unwrap();
320-
let (decoded,_) = bincode::serde::decode_from_slice::<MerkleTreeCommitment<Blake2b<U32>>,_>(&encoded, bincode::config::legacy()).unwrap();
315+
let encoded = t.to_merkle_tree_commitment().to_bytes();
316+
let decoded = MerkleTreeCommitment::<Blake2b<U32>>::from_bytes(&encoded).unwrap();
321317

322318
let tree_commitment = MerkleTree::<Blake2b<U32>>::new(&values).to_merkle_tree_commitment();
323319
assert_eq!(tree_commitment.root, decoded.root);
@@ -329,16 +325,12 @@ mod tests {
329325
let deserialised = MerkleTree::<Blake2b<U32>>::from_bytes(&bytes).unwrap();
330326
let tree = MerkleTree::<Blake2b<U32>>::new(&values);
331327
assert_eq!(tree.nodes, deserialised.nodes);
332-
333-
let encoded = bincode::serde::encode_to_vec(&t, bincode::config::legacy()).unwrap();
334-
let (decoded,_) = bincode::serde::decode_from_slice::<MerkleTree<Blake2b<U32>>,_>(&encoded, bincode::config::legacy()).unwrap();
335-
assert_eq!(tree.nodes, decoded.nodes);
336328
}
337329

338330
#[test]
339331
fn test_bytes_tree_commitment_batch_compat((t, values) in arb_tree(5)) {
340-
let encoded = bincode::serde::encode_to_vec(t.to_merkle_tree_batch_commitment(), bincode::config::legacy()).unwrap();
341-
let (decoded,_) = bincode::serde::decode_from_slice::<MerkleTreeBatchCommitment<Blake2b<U32>>,_>(&encoded, bincode::config::legacy()).unwrap();
332+
let encoded = t.to_merkle_tree_batch_commitment().to_bytes();
333+
let decoded = MerkleTreeBatchCommitment::<Blake2b<U32>>::from_bytes(&encoded).unwrap();
342334
let tree_commitment = MerkleTree::<Blake2b<U32>>::new(&values).to_merkle_tree_batch_commitment();
343335
assert_eq!(tree_commitment.root, decoded.root);
344336
assert_eq!(tree_commitment.get_number_of_leaves(), decoded.get_number_of_leaves());
@@ -427,10 +419,6 @@ mod tests {
427419
let bytes = &bp.to_bytes();
428420
let deserialized = MerkleBatchPath::from_bytes(bytes).unwrap();
429421
assert!(t.to_merkle_tree_batch_commitment().verify_leaves_membership_from_batch_path(&batch_values, &deserialized).is_ok());
430-
431-
let encoded = bincode::serde::encode_to_vec(&bp, bincode::config::legacy()).unwrap();
432-
let (decoded,_) = bincode::serde::decode_from_slice::<MerkleBatchPath<Blake2b<U32>>,_>(&encoded, bincode::config::legacy()).unwrap();
433-
assert!(t.to_merkle_tree_batch_commitment().verify_leaves_membership_from_batch_path(&batch_values, &decoded).is_ok());
434422
}
435423
}
436424
}

0 commit comments

Comments
 (0)