1#![no_std]
2#![doc = include_str!("../README.md")]
3#![doc(
4 html_logo_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg",
5 html_favicon_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg"
6)]
7#![cfg_attr(docsrs, feature(doc_cfg))]
8#![forbid(unsafe_code)]
9#![warn(missing_docs, missing_debug_implementations)]
10#![warn(unreachable_pub)]
11
12pub use digest::{self, CollisionResistance, CustomizedInit, Digest};
13
14pub mod block_api;
16
17use block_api::{Sha3HasherCore, Sha3ReaderCore};
18use digest::consts::{U0, U16, U28, U32, U48, U64, U72, U104, U136, U144, U168, U200};
19
20const KECCAK_PAD: u8 = 0x01;
22const SHA3_PAD: u8 = 0x06;
23const SHAKE_PAD: u8 = 0x1f;
24
25digest::buffer_fixed!(
26 pub struct Sha3_224(Sha3HasherCore<U144, U28, SHA3_PAD>);
28 oid: "2.16.840.1.101.3.4.2.7";
29 impl: FixedHashTraits;
30);
31digest::buffer_fixed!(
32 pub struct Sha3_256(Sha3HasherCore<U136, U32, SHA3_PAD>);
34 oid: "2.16.840.1.101.3.4.2.8";
35 impl: FixedHashTraits;
36);
37digest::buffer_fixed!(
38 pub struct Sha3_384(Sha3HasherCore<U104, U48, SHA3_PAD>);
40 oid: "2.16.840.1.101.3.4.2.9";
41 impl: FixedHashTraits;
42);
43digest::buffer_fixed!(
44 pub struct Sha3_512(Sha3HasherCore<U72, U64, SHA3_PAD>);
46 oid: "2.16.840.1.101.3.4.2.10";
47 impl: FixedHashTraits;
48);
49digest::buffer_xof!(
50 pub struct Shake128(Sha3HasherCore<U168, U0, SHAKE_PAD>);
52 oid: "2.16.840.1.101.3.4.2.11";
53 impl: XofHasherTraits;
54 pub struct Shake128Reader(Sha3ReaderCore<U168>);
56 impl: XofReaderTraits;
57);
58digest::buffer_xof!(
59 pub struct Shake256(Sha3HasherCore<U136, U0, SHAKE_PAD>);
61 oid: "2.16.840.1.101.3.4.2.12";
62 impl: XofHasherTraits;
63 pub struct Shake256Reader(Sha3ReaderCore<U136>);
65 impl: XofReaderTraits;
66);
67
68digest::buffer_fixed!(
69 pub struct Keccak256Full(Sha3HasherCore<U136, U200, KECCAK_PAD>);
71 impl: FixedHashTraits;
72);
73digest::buffer_fixed!(
74 pub struct Keccak224(Sha3HasherCore<U144, U28, KECCAK_PAD>);
76 impl: FixedHashTraits;
77);
78digest::buffer_fixed!(
79 pub struct Keccak256(Sha3HasherCore<U136, U32, KECCAK_PAD>);
81 impl: FixedHashTraits;
82);
83digest::buffer_fixed!(
84 pub struct Keccak384(Sha3HasherCore<U104, U48, KECCAK_PAD>);
86 impl: FixedHashTraits;
87);
88digest::buffer_fixed!(
89 pub struct Keccak512(Sha3HasherCore<U72, U64, KECCAK_PAD>);
91 impl: FixedHashTraits;
92);
93
94impl CollisionResistance for Shake128 {
95 type CollisionResistance = U16;
97}
98
99impl CollisionResistance for Shake256 {
100 type CollisionResistance = U32;
102}