1#![forbid(unsafe_code)]
19#![deny(rust_2018_idioms, nonstandard_style)]
20#![warn(future_incompatible, missing_docs)]
21#![cfg_attr(docsrs, feature(doc_auto_cfg))]
22
23mod body_hash;
24
25pub use self::body_hash::{BodyHash, BodyHashParts};
26
27macro_rules! body_hash_alias {
28 ($name:ident, $digest:path, $feature:literal, $desc:literal, $out_size:literal) => {
29 #[doc = concat!("Wraps an extractor and calculates a `", $desc, "` body checksum hash alongside.")]
30 #[doc = concat!("use actix_hash::", stringify!($name), ";")]
34 #[doc = concat!("async fn handler(body: ", stringify!($name), "<String>) -> String {")]
36 #[doc = concat!(" assert_eq!(body.hash().len(), ", $out_size, ");")]
37 #[doc = concat!("# type Hasher = ", stringify!($digest), ";")]
42 #[doc = concat!("# const OutSize: usize = ", $out_size, ";")]
43 #[cfg(feature = $feature)]
51 pub type $name<T> = BodyHash<T, $digest>;
52 };
53}
54
55body_hash_alias!(BodyMd4, md4::Md4, "md4", "MD4", 16);
57body_hash_alias!(BodyMd5, md5::Md5, "md5", "MD5", 16);
58body_hash_alias!(BodySha1, sha1::Sha1, "sha1", "SHA-1", 20);
59
60body_hash_alias!(BodySha224, sha2::Sha224, "sha2", "SHA-224", 28);
62body_hash_alias!(BodySha256, sha2::Sha256, "sha2", "SHA-256", 32);
63body_hash_alias!(BodySha384, sha2::Sha384, "sha2", "SHA-384", 48);
64body_hash_alias!(BodySha512, sha2::Sha512, "sha2", "SHA-512", 64);
65
66body_hash_alias!(BodySha3_224, sha3::Sha3_224, "sha3", "SHA-3-224", 28);
68body_hash_alias!(BodySha3_256, sha3::Sha3_256, "sha3", "SHA-3-256", 32);
69body_hash_alias!(BodySha3_384, sha3::Sha3_384, "sha3", "SHA-3-384", 48);
70body_hash_alias!(BodySha3_512, sha3::Sha3_512, "sha3", "SHA-3-512", 64);
71
72body_hash_alias!(BodyBlake2b, blake2::Blake2b512, "blake2", "Blake2b", 64);
74body_hash_alias!(BodyBlake2s, blake2::Blake2s256, "blake2", "Blake2s", 32);
75
76body_hash_alias!(BodyBlake3, blake3::Hasher, "blake3", "Blake3", 32);