--- a/Cargo.lock +++ b/Cargo.lock @@ -375,7 +375,9 @@ "serde", "serde_json", "serde_yaml_with_quirks", + "sha1", "sha2", + "sha3", "structdump", ] @@ -388,6 +390,15 @@ ] [[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + +[[package]] name = "libc" version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -676,6 +687,17 @@ ] [[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] name = "sha2" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -687,6 +709,16 @@ ] [[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] name = "smallvec" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" --- a/crates/jrsonnet-stdlib/Cargo.toml +++ b/crates/jrsonnet-stdlib/Cargo.toml @@ -32,8 +32,12 @@ # std.md5 md5 = "0.7.0" +# std.sha1 +sha1 = "0.10.5" # std.sha256, std.sha512 sha2 = "0.10.6" +# std.sha3 +sha3 = "0.10.8" # std.base64 base64 = "0.21.0" # std.parseJson --- a/crates/jrsonnet-stdlib/src/hash.rs +++ b/crates/jrsonnet-stdlib/src/hash.rs @@ -16,3 +16,15 @@ use sha2::digest::Digest; format!("{:x}", sha2::Sha512::digest(s.as_bytes())) } + +#[builtin] +pub fn builtin_sha1(s: IStr) -> String { + use sha1::digest::Digest; + format!("{:x}", sha1::Sha1::digest(s.as_bytes())) +} + +#[builtin] +pub fn builtin_sha3(s: IStr) -> String { + use sha3::digest::Digest; + format!("{:x}", sha3::Sha3_512::digest(s.as_bytes())) +} --- a/crates/jrsonnet-stdlib/src/lib.rs +++ b/crates/jrsonnet-stdlib/src/lib.rs @@ -124,8 +124,10 @@ ("maxArray", builtin_max_array::INST), // Hash ("md5", builtin_md5::INST), + ("sha1", builtin_sha1::INST), ("sha256", builtin_sha256::INST), ("sha512", builtin_sha512::INST), + ("sha3", builtin_sha3::INST), // Encoding ("encodeUTF8", builtin_encode_utf8::INST), ("decodeUTF8", builtin_decode_utf8::INST),