Skip to content

Commit 7e8e0d5

Browse files
authored
fix: introduce relaxed hash decoding flag (#713)
1 parent 8647c66 commit 7e8e0d5

File tree

6 files changed

+32
-2
lines changed

6 files changed

+32
-2
lines changed

pallas-crypto/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ homepage = "https://github.com/txpipe/pallas"
88
documentation = "https://docs.rs/pallas-crypto"
99
license = "Apache-2.0"
1010
readme = "README.md"
11-
authors = ["Nicolas Di Prima <[email protected]>", "Andrew Westberg <[email protected]>"]
11+
authors = [
12+
"Nicolas Di Prima <[email protected]>",
13+
"Andrew Westberg <[email protected]>",
14+
]
1215

1316
[dependencies]
1417
hex = "0.4"
@@ -38,6 +41,7 @@ serde_test = "1.0.143"
3841
default = []
3942
sk_clone_enabled = []
4043
kes = ["rand", "rand_chacha", "serde_with", "ed25519-dalek", "zeroize"]
44+
relaxed = []
4145

4246
[[bench]]
4347
harness = false

pallas-crypto/src/hash/hash.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ impl<C, const BYTES: usize> minicbor::Encode<C> for Hash<BYTES> {
8686
}
8787

8888
impl<'a, C, const BYTES: usize> minicbor::Decode<'a, C> for Hash<BYTES> {
89+
#[cfg(not(feature = "relaxed"))]
8990
fn decode(
9091
d: &mut minicbor::Decoder<'a>,
9192
_ctx: &mut C,
@@ -101,6 +102,22 @@ impl<'a, C, const BYTES: usize> minicbor::Decode<'a, C> for Hash<BYTES> {
101102
Err(minicbor::decode::Error::message("Invalid hash size"))
102103
}
103104
}
105+
106+
#[cfg(feature = "relaxed")]
107+
fn decode(
108+
d: &mut minicbor::Decoder<'a>,
109+
_ctx: &mut C,
110+
) -> Result<Self, minicbor::decode::Error> {
111+
let bytes = d.bytes()?;
112+
113+
if bytes.len() != BYTES {
114+
dbg!(hex::encode(bytes));
115+
}
116+
117+
let mut hash = [0; BYTES];
118+
hash.copy_from_slice(&bytes[..BYTES]);
119+
Ok(Self::new(hash))
120+
}
104121
}
105122

106123
#[cfg(test)]

pallas-primitives/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ homepage = "https://github.com/txpipe/pallas"
88
documentation = "https://docs.rs/pallas-primitives"
99
license = "Apache-2.0"
1010
readme = "README.md"
11-
authors = ["Santiago Carmuega <[email protected]>", "Lucas Rosa <[email protected]>"]
11+
authors = [
12+
"Santiago Carmuega <[email protected]>",
13+
"Lucas Rosa <[email protected]>",
14+
]
1215

1316
[dependencies]
1417
hex = "0.4.3"
@@ -24,3 +27,4 @@ test-case = "3.3.1"
2427
[features]
2528
json = ["serde", "serde_json"]
2629
default = ["json"]
30+
relaxed = ["pallas-crypto/relaxed"]

pallas-primitives/src/conway/model.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,9 @@ mod tests {
793793
include_str!("../../../test_data/conway3.block"),
794794
// interesting block with extreme values
795795
include_str!("../../../test_data/conway4.block"),
796+
// peculiar block with hash-size issue
797+
#[cfg(feature = "relaxed")]
798+
include_str!("../../../test_data/conway8.block"),
796799
];
797800

798801
for (idx, block_str) in test_blocks.iter().enumerate() {

pallas/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ unstable = ["hardano", "pallas-traverse/unstable"]
2929

3030
# pallas-validate feature flags
3131
phase2 = ["pallas-validate/phase2"]
32+
relaxed = ["pallas-primitives/relaxed", "pallas-crypto/relaxed"]

test_data/conway8.block

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
820785828a1a0039cebd1a05c7ad005820a12483b3b748978d0f8d6b7f9c4b800b6dbcb6b1f5295440dfcb2e6e265afaa05820bcf37cd396fcd9655778a4ee894699b399b4448550068dec3c819fb88a30c46d58207a8eb1b0ce2b3b906461d183d9df18d156c05d0feadbc4cbcd1674bf32e32aa8825840c10988a2e3fdb6491fa7e3aa2f7d64de975982dbe10f19c3225826056d1aa6c0ded448f511d643ca6a52f36a7453cd7e6741c29c39acdf36138e697e761dccf958507597753a99228926ae375252bfac3700dcadf83de635f53c2266f3df04e413586635333c9d75f519c55c86a6111dc770a46b02467b8331f03f2c404875e22d44665273ce4090be431fbedb9315a43f0b19069a5820409dd17c79ab8f20bea73f6b61a297816cc0e05fbf39aeed104b8e1ceeb4aefe845820203ee2030602f81eec79737f9acc3d366e2888e9d17f818bf3b7350fea64026a183e1902ea5840a7e7ae6512f155b4d50063a86608f1647a725b440aa2866d67ed01d812a01bedd6a486ee8ee38204c826abcbba94a146951c8874b4fe52c4a458ab623f7d9109820a035901c076a7947670905e99b4700fd982da099dd11478ff7daf19c1a57a811bc850697bfc07327a4c9123401cf624ce574af3fc20cac6c3c6a97536d4b956386123790a51f56a4e28f6f1cbdb38b78cadf76685089c243442c5e8fd2be697f399af8178418f6a632768139b343a3d4637a6e08a04525394758dc9642ca72542fbc86b81397796752d9a4e3e6e3d74a5c82680bcc8224fc05adc86e90c903e78c1af7b386c73f9dc07a85d72b31c771c738e6d04fdb295ee464c13e3a804c3c73465927b38400d2cf9ac2d16ce59c1648627cd8a658de84da27e90d3608fbc487c77c2c938ce04cd906bdc24b1b7c67e241ebd80074e68f37aaed08d084b14fbde92504bc921b783bbd0aa4b99e77e0b32da640f92e0f8a5d4740fd00120c3012c422428c9b3bc95e3951d479daaed62ef4164b0438638d6bc0e4c81e32ffa18528bb71ba3e1638be65a4bd152d954814eda349af267573df55256b0b8248fe64757a8f0f5274bebee9c3044936de1a66985e4e23b660a7572a0bd1375d8f123ab618fb44f1d4efcadbe55de08352f98ed416b77e02dab27abc07488e0d85281f7f65cb1769377391030fe1f4bdde197a3f833f91104a06a90a9ae0a0962f948e79f6a3f82aa008c82582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600782582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600682582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600582582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600482582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600382582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600282582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600b82582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600982582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600882582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df6405600a82582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df64056000825820f078b52d8271c4ad934044347fad0bc50ad9c3763621fa0b6d3ff8a5c832bb53030182a300581d70e87da642368c7cbbd918b556fc75e3bd7e064c00e74c87830457968d01821a01f78a40a3581c5606ec1f689768531abbcec60483193148fcc7cc4f2a767347ea0a38a14001581c919d4c2c9455016289341b1a14dedf697687af31751170d56a31466ea144744552471b0000fd5ea42a589b581ce2fa10e79331fc8a778d50fe8484095236cd90aec277f54c3e0c0913a1400a028201d818479f0000000000ff82583900f97ccf4fe384174e63f2250a3c4a61f851112ed0b93caeb6aa84308e95d8feca512588e1a954ee5a8ae2beff32ea360590be694b5065d8581b00000001693748fa021a000746f1031a05c7b037081a05c7acb30b58209326cd2abf6bbe74127d09ab826f3399ccb42cafdc2f2c094dc8ff89c93c8b120d81825820f078b52d8271c4ad934044347fad0bc50ad9c3763621fa0b6d3ff8a5c832bb53031082583900f97ccf4fe384174e63f2250a3c4a61f851112ed0b93caeb6aa84308e95d8feca512588e1a954ee5a8ae2beff32ea360590be694b5065d8581b000000016933a581111a000aea6a1284825820b87bf1b70a3218a9ac8a4c90420c521f3f342de0c3931698718427c2ac0c1ea50082582085388cf2259b48076d18f6f132c592ba23436616698eb04f007a59be4ca5c1dd0082582077203c51167181813f09d199ca7ec68a6568ba31fbe2dc9e1bdd5947df640560018258208d511982a6e60cf39511555c525a4705374dfdce0093b0bb948f2017e8e8a79604a500818258201efc7ffb9772f4425a8edea129b6f08732d3dc41fcb957bfd40d0db68bb33d1600018182581d609749ac0e073844185403a2927239b4e663085e7090d6a4691ac1decf1a00209514021a0005908c031a7fffffff048282008200581c89ca2be8a9b0680dd3293268fe336bf46e2992e52d551b4bdb624a1283028200581c89ca2be8a9b0680dd3293268fe336bf46e2992e52d551b4bdb624a125838040e1032e2dda149c99fc9d45f06a0457ded6958cd5b2fc2a952ea6e040e1032e2dda149c99fc9d45f06a0457ded6958cd5b2fc2a952ea6e82a300818258206e290ca92c2484c00955ecf4f6c2e539e2223365872a2018ba1cf761aa3683c85840a117b19593ff3b04420fa1f2ec506e6fccf25cf3102d10d8fe98ad18a06c658019e6d8ffcf17ca7ec4eff6482594114e135633f175e4e1a87fdb9dbe5656b506049fd87980ff058b840000d87980821a0013c23a1a1f32c2b6840001d879808219ff441a014f9929840002d879808219ff441a014f9929840003d879808219ff441a014f9929840004d879808219ff441a014f9929840005d879808219ff441a014f9929840006d879808219ff441a014f9929840007d879808219ff441a014f9929840008d879808219ff441a014f9929840009d879808219ff441a014f992984000ad879808219ff441a014f9929a100828258208c7cc0fcc56e445e28554694060ab5a73c44ceeb76b09530f7126f49f99a63c65840a859678f5d78d8dba62a3f40bc333d4537ae9353de4db0678de8c58158fc4df47185f01cac722133d1f50c465e6ec6155b6763a94acec660c4243f1082bc5b0f8258201751b10751f407febe1f9482514195546e13903e6d63ed2260d03ceb28dcff92584075c78c766d635e4d3953f370af5d2303bb16a25b2f3e59f9a1acd09a293719ff76d2aedc96a7ffa345f8c12faf595895998293087c07e43675b0c1c99b102401a080

0 commit comments

Comments
 (0)