Skip to main content

pakery_crypto/
lib.rs

1//! Concrete cryptographic implementations for PAKE protocols.
2//!
3//! Provides implementations of the traits defined in `pakery-core::crypto`
4//! backed by well-known cryptographic crates.
5
6#![cfg_attr(not(feature = "std"), no_std)]
7#![forbid(unsafe_code)]
8#![warn(missing_docs)]
9
10extern crate alloc;
11
12// SHA-512 primitives: shared by ristretto255 and p256 (CPace P-256 needs SHA-512)
13#[cfg(any(feature = "ristretto255", feature = "p256"))]
14pub mod hash;
15#[cfg(any(feature = "ristretto255", feature = "p256"))]
16pub mod kdf;
17#[cfg(any(feature = "ristretto255", feature = "p256"))]
18pub mod mac;
19
20#[cfg(feature = "argon2")]
21pub mod ksf;
22#[cfg(any(feature = "ristretto255", feature = "p256"))]
23pub(crate) mod oprf_common;
24#[cfg(feature = "ristretto255")]
25pub mod oprf_ristretto;
26#[cfg(feature = "ristretto255")]
27pub mod ristretto255;
28#[cfg(feature = "ristretto255")]
29pub mod spake2_constants;
30
31#[cfg(feature = "p256")]
32pub mod oprf_p256;
33#[cfg(feature = "p256")]
34pub mod p256_dh;
35
36// P-256 modules
37#[cfg(feature = "p256")]
38pub mod hash_sha256;
39#[cfg(feature = "p256")]
40pub mod kdf_sha256;
41#[cfg(feature = "p256")]
42pub mod mac_sha256;
43#[cfg(feature = "p256")]
44pub mod p256_group;
45#[cfg(feature = "p256")]
46pub mod spake2_constants_p256;
47
48// Pre-built ciphersuites
49#[cfg(any(
50    feature = "cpace",
51    feature = "spake2",
52    feature = "spake2plus",
53    feature = "opaque"
54))]
55pub mod suites;
56
57// SHA-512 re-exports
58#[cfg(any(feature = "ristretto255", feature = "p256"))]
59pub use hash::Sha512Hash;
60#[cfg(any(feature = "ristretto255", feature = "p256"))]
61pub use kdf::HkdfSha512;
62#[cfg(any(feature = "ristretto255", feature = "p256"))]
63pub use mac::HmacSha512;
64
65#[cfg(feature = "argon2")]
66pub use ksf::Argon2idKsf;
67#[cfg(feature = "ristretto255")]
68pub use oprf_ristretto::Ristretto255Oprf;
69#[cfg(feature = "ristretto255")]
70pub use ristretto255::{Ristretto255Dh, Ristretto255Group};
71#[cfg(feature = "ristretto255")]
72pub use spake2_constants::{SPAKE2_M_COMPRESSED, SPAKE2_N_COMPRESSED, SPAKE2_S_COMPRESSED};
73
74// P-256 re-exports
75#[cfg(feature = "p256")]
76pub use hash_sha256::Sha256Hash;
77#[cfg(feature = "p256")]
78pub use kdf_sha256::HkdfSha256;
79#[cfg(feature = "p256")]
80pub use mac_sha256::HmacSha256;
81#[cfg(feature = "p256")]
82pub use oprf_p256::P256Oprf;
83#[cfg(feature = "p256")]
84pub use p256_dh::P256Dh;
85#[cfg(feature = "p256")]
86pub use p256_group::P256Group;
87#[cfg(feature = "p256")]
88pub use spake2_constants_p256::{SPAKE2_P256_M_COMPRESSED, SPAKE2_P256_N_COMPRESSED};
89
90// Pre-built ciphersuite re-exports
91#[cfg(all(feature = "cpace", feature = "p256"))]
92pub use suites::CpaceP256;
93#[cfg(all(feature = "cpace", feature = "ristretto255"))]
94pub use suites::CpaceRistretto255;
95#[cfg(all(feature = "opaque", feature = "p256"))]
96pub use suites::OpaqueP256;
97#[cfg(all(feature = "opaque", feature = "p256", feature = "argon2"))]
98pub use suites::OpaqueP256Argon2;
99#[cfg(all(feature = "opaque", feature = "ristretto255"))]
100pub use suites::OpaqueRistretto255;
101#[cfg(all(feature = "opaque", feature = "ristretto255", feature = "argon2"))]
102pub use suites::OpaqueRistretto255Argon2;
103#[cfg(all(feature = "spake2", feature = "p256"))]
104pub use suites::Spake2P256;
105#[cfg(all(feature = "spake2plus", feature = "p256"))]
106pub use suites::Spake2PlusP256;
107#[cfg(all(feature = "spake2plus", feature = "ristretto255"))]
108pub use suites::Spake2PlusRistretto255;
109#[cfg(all(feature = "spake2", feature = "ristretto255"))]
110pub use suites::Spake2Ristretto255;