From cb91b67cf494dad6729948649306001bc453609b Mon Sep 17 00:00:00 2001 From: Supragya Raj Date: Fri, 3 May 2024 13:19:06 +0530 Subject: [PATCH 1/5] add: basic RFC1321: Message Digest 5 --- Cargo.toml | 1 + README.md | 1 + [rfc1321]message-digest-v5-hash/Cargo.toml | 6 ++++++ [rfc1321]message-digest-v5-hash/README.md | 3 +++ [rfc1321]message-digest-v5-hash/src/lib.rs | 0 5 files changed, 11 insertions(+) create mode 100644 [rfc1321]message-digest-v5-hash/Cargo.toml create mode 100644 [rfc1321]message-digest-v5-hash/README.md create mode 100644 [rfc1321]message-digest-v5-hash/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 7e726fb..08cbd69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ members = [ "[Sha97]shamir-secret-sharing", "[Fel87]feldman-verifiable-secret-sharing", "[Sch91]schnorr-discrete-log-proof-of-knowledge", + "[rfc1321]message-digest-v5-hash", ] resolver = "2" diff --git a/README.md b/README.md index f4be4e8..e786a1d 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,4 @@ cd Cryptography-Research && cargo test - **\[Sha97\]**: Shamir's secret sharing https://apps.dtic.mil/sti/pdfs/ADA069397.pdf. - **\[Fel87\]**: Feldman's verifiable secret sharing https://www.zkdocs.com/docs/zkdocs/protocol-primitives/verifiable-secret-sharing/ - **\[Sch91\]**: Schnorr's DLog PoK https://www.zkdocs.com/docs/zkdocs/zero-knowledge-protocols/schnorr/ +- **\[rfc1321\]**: Message Digest v5 hashing function: https://datatracker.ietf.org/doc/html/rfc1321 diff --git a/[rfc1321]message-digest-v5-hash/Cargo.toml b/[rfc1321]message-digest-v5-hash/Cargo.toml new file mode 100644 index 0000000..2cc597b --- /dev/null +++ b/[rfc1321]message-digest-v5-hash/Cargo.toml @@ -0,0 +1,6 @@ +[package] +edition = "2021" +name = "message-digest-5" +version = "0.1.0" + +[dependencies] diff --git a/[rfc1321]message-digest-v5-hash/README.md b/[rfc1321]message-digest-v5-hash/README.md new file mode 100644 index 0000000..c60d1ed --- /dev/null +++ b/[rfc1321]message-digest-v5-hash/README.md @@ -0,0 +1,3 @@ +# Message Digest version 5 + +## References diff --git a/[rfc1321]message-digest-v5-hash/src/lib.rs b/[rfc1321]message-digest-v5-hash/src/lib.rs new file mode 100644 index 0000000..e69de29 From 3ab74b4dc475479384af0dd970d2cd8b1147a953 Mon Sep 17 00:00:00 2001 From: Supragya Raj Date: Fri, 3 May 2024 14:20:31 +0530 Subject: [PATCH 2/5] impl: new for MessageDigest5 --- Cargo.toml | 3 +- [rfc1321]message-digest-v5-hash/Cargo.toml | 1 + [rfc1321]message-digest-v5-hash/README.md | 1 + [rfc1321]message-digest-v5-hash/src/lib.rs | 80 ++++++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 08cbd69..4367aeb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,10 +3,10 @@ members = [ "polynomial", "univariate-polynomial-iop-zerotest", "halo2-trials", + "[Rfc1321]message-digest-v5-hash", "[Sha97]shamir-secret-sharing", "[Fel87]feldman-verifiable-secret-sharing", "[Sch91]schnorr-discrete-log-proof-of-knowledge", - "[rfc1321]message-digest-v5-hash", ] resolver = "2" @@ -29,3 +29,4 @@ rand_core = "0.6.4" rand = "0.8.5" rand_chacha = "0.3.1" simba = "0.8.1" +itertools = "0.12.1" diff --git a/[rfc1321]message-digest-v5-hash/Cargo.toml b/[rfc1321]message-digest-v5-hash/Cargo.toml index 2cc597b..faac360 100644 --- a/[rfc1321]message-digest-v5-hash/Cargo.toml +++ b/[rfc1321]message-digest-v5-hash/Cargo.toml @@ -4,3 +4,4 @@ name = "message-digest-5" version = "0.1.0" [dependencies] +itertools = { workspace = true } diff --git a/[rfc1321]message-digest-v5-hash/README.md b/[rfc1321]message-digest-v5-hash/README.md index c60d1ed..628249a 100644 --- a/[rfc1321]message-digest-v5-hash/README.md +++ b/[rfc1321]message-digest-v5-hash/README.md @@ -1,3 +1,4 @@ # Message Digest version 5 +See associated info at: https://hackmd.io/@sraj/zk-hashfunc-comparison ## References diff --git a/[rfc1321]message-digest-v5-hash/src/lib.rs b/[rfc1321]message-digest-v5-hash/src/lib.rs index e69de29..ec8c92c 100644 --- a/[rfc1321]message-digest-v5-hash/src/lib.rs +++ b/[rfc1321]message-digest-v5-hash/src/lib.rs @@ -0,0 +1,80 @@ +/// A generalized trait for hashing systems using +/// a Merkle–Damgård construction +trait MerkleDamgard { + type InternalState; + type Chunk; + type HashOutput; + + /// An MD-compliant input padding logic + fn pad_input(message: &[u8]) -> Vec; + + /// Compressor step to consume a chunk and affect the state + fn apply_compressor(state: &mut Self::InternalState, chunk: Self::Chunk); + + /// Final output producer + fn finalize() -> Self::HashOutput; +} + +struct MessageDigestV5 { + round_constants: [u32; 64], + shift_amounts: [u32; 64], + initialization_state: [u32; 4], +} + +impl MessageDigestV5 { + #[rustfmt::skip] + pub fn new() -> Self { + // The table formula function: + // K[i] = floor(2^32 * abs(sin(i)) + fn round_constant_generator(i: u32) -> u32 { + let x: f64 = i as f64; + let sin_eval = x.sin().abs(); + + // note: 4294967296 == 2^32 + (4294967296.0 * sin_eval) as u32 + } + + Self { + round_constants: (0..64) + .map(|x| round_constant_generator(x+1)) + .collect::>()[0..64] + .try_into() + .unwrap(), + shift_amounts: [ + [7, 12, 17, 22].into_iter().cycle().take(16).collect::>(), + [5, 9, 14, 20].into_iter().cycle().take(16).collect::>(), + [4, 11, 16, 23].into_iter().cycle().take(16).collect::>(), + [6, 10, 15, 21].into_iter().cycle().take(16).collect::>() + ].concat()[0..64] + .try_into() + .unwrap(), + initialization_state: [0x67452301u32, 0xefcdab89u32, 0x98badcfeu32, 0x10325476u32], + } + } +} + +impl MerkleDamgard for MessageDigestV5 { + type InternalState = [u32; 4]; + type Chunk = u32; + type HashOutput = [u32; 4]; + + fn pad_input(message: &[u8]) -> Vec { + todo!() + } + + fn apply_compressor(state: &mut Self::InternalState, chunk: Self::Chunk) { + todo!() + } + + fn finalize() -> Self::HashOutput { + todo!() + } +} + +#[cfg(test)] +mod tests { + #[test] + fn two() { + assert!(2 == 2); + } +} From e708094bf4fa776b766bd20c124e7ee9681db18d Mon Sep 17 00:00:00 2001 From: Supragya Raj Date: Sat, 4 May 2024 10:14:01 -0700 Subject: [PATCH 3/5] Update README.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e786a1d..636ace2 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ cd Cryptography-Research && cargo test ``` ## References -- **\[Sha97\]**: Shamir's secret sharing https://apps.dtic.mil/sti/pdfs/ADA069397.pdf. -- **\[Fel87\]**: Feldman's verifiable secret sharing https://www.zkdocs.com/docs/zkdocs/protocol-primitives/verifiable-secret-sharing/ -- **\[Sch91\]**: Schnorr's DLog PoK https://www.zkdocs.com/docs/zkdocs/zero-knowledge-protocols/schnorr/ -- **\[rfc1321\]**: Message Digest v5 hashing function: https://datatracker.ietf.org/doc/html/rfc1321 +- **\[Sha97\]**: [Shamir's secret sharing](https://apps.dtic.mil/sti/pdfs/ADA069397.pdf) +- **\[Fel87\]**: [Feldman's verifiable secret sharing](https://www.zkdocs.com/docs/zkdocs/protocol-primitives/verifiable-secret-sharing/) +- **\[Sch91\]**: [Schnorr's DLog PoK](https://www.zkdocs.com/docs/zkdocs/zero-knowledge-protocols/schnorr/) +- **\[rfc1321\]**: [Message Digest v5 hashing function](https://datatracker.ietf.org/doc/html/rfc1321) From 5e1ede1a0168cb5e5197478261763830a14cd5df Mon Sep 17 00:00:00 2001 From: Supragya Raj Date: Mon, 13 May 2024 09:06:06 +0530 Subject: [PATCH 4/5] Update [rfc1321]message-digest-v5-hash/README.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- [rfc1321]message-digest-v5-hash/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[rfc1321]message-digest-v5-hash/README.md b/[rfc1321]message-digest-v5-hash/README.md index 628249a..472a29b 100644 --- a/[rfc1321]message-digest-v5-hash/README.md +++ b/[rfc1321]message-digest-v5-hash/README.md @@ -1,4 +1,4 @@ # Message Digest version 5 -See associated info at: https://hackmd.io/@sraj/zk-hashfunc-comparison +See associated info at: [here](https://hackmd.io/@sraj/zk-hashfunc-comparison) ## References From bae7450b2cda0b4c9872f67632baec524329e1eb Mon Sep 17 00:00:00 2001 From: Supragya Raj Date: Mon, 13 May 2024 09:06:21 +0530 Subject: [PATCH 5/5] Update [rfc1321]message-digest-v5-hash/README.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- [rfc1321]message-digest-v5-hash/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/[rfc1321]message-digest-v5-hash/README.md b/[rfc1321]message-digest-v5-hash/README.md index 472a29b..097bb03 100644 --- a/[rfc1321]message-digest-v5-hash/README.md +++ b/[rfc1321]message-digest-v5-hash/README.md @@ -1,4 +1,5 @@ # Message Digest version 5 + See associated info at: [here](https://hackmd.io/@sraj/zk-hashfunc-comparison) ## References