1use cfg_if::cfg_if;
5
6mod arch_optimal;
7pub mod portable;
8mod strategies;
9
10cfg_if! {
11 if #[cfg(all(target_arch = "x86_64"))] {
12 mod x86_64;
13 pub use x86_64::{packed_aes_128, packed_aes_256, packed_aes_512, packed_ghash_128, packed_ghash_256, packed_ghash_512, M128, M256, M512, m256_from_u128s};
14 pub use x86_64::packed_ghash_128::{GhashWideMul1x, GhashSquare1x, GhashInvert1x};
15 pub use x86_64::packed_ghash_256::{GhashWideMul2x, GhashSquare2x, GhashInvert2x};
16 pub use x86_64::packed_ghash_512::{GhashWideMul4x, GhashSquare4x, GhashInvert4x};
17 pub use x86_64::packed_aes_128::{AesWideMul16x, AesSquare16x, AesInvert16x};
18 pub use x86_64::packed_aes_256::{AesWideMul32x, AesSquare32x, AesInvert32x};
19 pub use x86_64::packed_aes_512::{AesWideMul64x, AesSquare64x, AesInvert64x};
20 } else if #[cfg(target_arch = "aarch64")] {
21 mod aarch64;
22 pub use aarch64::{packed_aes_128, packed_ghash_128, M128, M256, M512, m256_from_u128s};
23 pub use aarch64::packed_ghash_128::{GhashWideMul1x, GhashSquare1x, GhashInvert1x};
24 pub use portable::{packed_aes_256, packed_aes_512, packed_ghash_256, packed_ghash_512};
25 pub use portable::packed_ghash_256::{GhashWideMul2x, GhashSquare2x, GhashInvert2x};
26 pub use portable::packed_ghash_512::{GhashWideMul4x, GhashSquare4x, GhashInvert4x};
27 pub use aarch64::packed_aes_128::{AesWideMul16x, AesSquare16x, AesInvert16x};
28 pub use portable::packed_aes_256::{AesWideMul32x, AesSquare32x, AesInvert32x};
29 pub use portable::packed_aes_512::{AesWideMul64x, AesSquare64x, AesInvert64x};
30 } else if #[cfg(target_arch = "wasm32")] {
31 mod wasm32;
32 pub use wasm32::{packed_ghash_128, packed_ghash_256};
33 pub use wasm32::packed_ghash_128::{GhashWideMul1x, GhashSquare1x, GhashInvert1x};
34 pub use portable::{M128, M256, M512, m256_from_u128s, packed_aes_128, packed_aes_256, packed_aes_512, packed_ghash_512};
35 pub use portable::packed_ghash_256::{GhashWideMul2x, GhashSquare2x, GhashInvert2x};
36 pub use portable::packed_ghash_512::{GhashWideMul4x, GhashSquare4x, GhashInvert4x};
37 pub use portable::packed_aes_128::{AesWideMul16x, AesSquare16x, AesInvert16x};
38 pub use portable::packed_aes_256::{AesWideMul32x, AesSquare32x, AesInvert32x};
39 pub use portable::packed_aes_512::{AesWideMul64x, AesSquare64x, AesInvert64x};
40 } else {
41 pub use portable::{M128, M256, M512, m256_from_u128s, packed_aes_128, packed_aes_256, packed_aes_512, packed_ghash_128, packed_ghash_256, packed_ghash_512};
42 pub use portable::packed_ghash_128::{GhashWideMul1x, GhashSquare1x, GhashInvert1x};
43 pub use portable::packed_ghash_256::{GhashWideMul2x, GhashSquare2x, GhashInvert2x};
44 pub use portable::packed_ghash_512::{GhashWideMul4x, GhashSquare4x, GhashInvert4x};
45 pub use portable::packed_aes_128::{AesWideMul16x, AesSquare16x, AesInvert16x};
46 pub use portable::packed_aes_256::{AesWideMul32x, AesSquare32x, AesInvert32x};
47 pub use portable::packed_aes_512::{AesWideMul64x, AesSquare64x, AesInvert64x};
48 }
49}
50
51pub use arch_optimal::*;
52pub(crate) use portable::packed_arithmetic::{interleave_mask_even, interleave_with_mask};
53pub use portable::{
54 arithmetic::itoh_tsujii::invert_b128,
55 packed::PackedPrimitiveType,
56 packed_aes_8,
57 packed_aes_8::{AesInvert1x, AesSquare1x, AesWideMul1x},
58 pairwise_table_arithmetic::BytewiseLookup,
59 reuse_multiply_arithmetic::ReuseMultiply,
60 scaled_arithmetic::Scaled,
61};
62pub use strategies::*;