1#![cfg_attr(docsrs, feature(doc_auto_cfg))]
5#![allow(clippy::needless_doctest_main)]
6#![doc = include_str!("../README.md")]
7#![warn(missing_docs)]
8
9use aead::{Aead, KeyInit};
10use rand_core::CryptoRngCore;
11
12pub mod curves;
13
14mod blinding;
15pub use blinding::*;
16
17mod hint;
18pub use hint::*;
19
20mod hints;
21pub use hints::*;
22
23mod take_the;
24pub use take_the::*;
25
26mod error;
27pub use error::*;
28
29pub trait Decoy {
31 fn random_decoy(csprng: &mut impl CryptoRngCore) -> Self;
33}
34
35pub(crate) fn cipher_from_shared_secret<A: Aead + KeyInit>(shared_secret: impl AsRef<[u8]>) -> A {
37 let mut key = aead::Key::<A>::default();
38 key.copy_from_slice(&shared_secret.as_ref()[..A::key_size()]);
39
40 A::new(&key)
41}