1#![allow(non_snake_case)]
10#![deny(missing_docs)]
11#![no_std]
12
13mod encryption;
14mod error;
15mod keys;
16mod note;
17mod stealth_address;
18
19#[cfg(feature = "alloc")]
20mod transaction;
21
22#[cfg(feature = "serde")]
23mod serde_support;
24
25pub const OUTPUT_NOTES: usize = 2;
27
28pub use encryption::aes;
29pub use error::Error;
30pub use keys::hash;
31pub use keys::public::PublicKey;
32pub use keys::secret::SecretKey;
33pub use keys::view::ViewKey;
34pub use note::{Note, NoteType, Sender, VALUE_ENC_SIZE as NOTE_VAL_ENC_SIZE};
35pub use stealth_address::StealthAddress;
36
37#[cfg(feature = "alloc")]
38pub use transaction::TxSkeleton;
40
41use dusk_jubjub::{
42 JubJubAffine, JubJubScalar, GENERATOR_EXTENDED, GENERATOR_NUMS_EXTENDED,
43};
44
45pub fn transparent_value_commitment(value: u64) -> JubJubAffine {
48 JubJubAffine::from(GENERATOR_EXTENDED * JubJubScalar::from(value))
49}
50
51pub fn value_commitment(
54 value: u64,
55 blinding_factor: JubJubScalar,
56) -> JubJubAffine {
57 JubJubAffine::from(
58 (GENERATOR_EXTENDED * JubJubScalar::from(value))
59 + (GENERATOR_NUMS_EXTENDED * blinding_factor),
60 )
61}