sphinx_packet/
constants.rs1use crate::crypto;
16use digest::generic_array::typenum::U16;
17use sha2::Sha256;
18
19pub const SECURITY_PARAMETER: usize = 16; pub const MAX_PATH_LENGTH: usize = 5; pub const BLINDING_FACTOR_SIZE: usize = 2 * SECURITY_PARAMETER;
22
23pub const REPLAY_TAG_SIZE: usize = 2 * SECURITY_PARAMETER;
25
26pub const EXPANDED_SHARED_SECRET_LENGTH: usize = crypto::STREAM_CIPHER_KEY_SIZE
27 + INTEGRITY_MAC_KEY_SIZE
28 + PAYLOAD_KEY_SIZE
29 + BLINDING_FACTOR_SIZE
30 + REPLAY_TAG_SIZE;
31
32pub const STREAM_CIPHER_OUTPUT_LENGTH: usize =
33 (NODE_META_INFO_SIZE + HEADER_INTEGRITY_MAC_SIZE) * (MAX_PATH_LENGTH + 1);
34pub const DESTINATION_ADDRESS_LENGTH: usize = 2 * SECURITY_PARAMETER;
35pub const NODE_ADDRESS_LENGTH: usize = 2 * SECURITY_PARAMETER;
36pub const IDENTIFIER_LENGTH: usize = SECURITY_PARAMETER;
37pub const INTEGRITY_MAC_KEY_SIZE: usize = SECURITY_PARAMETER;
38pub const HEADER_INTEGRITY_MAC_SIZE: usize = SECURITY_PARAMETER;
39pub const PAYLOAD_KEY_SEED_SIZE: usize = SECURITY_PARAMETER;
40pub const PAYLOAD_KEY_SIZE: usize = 192; pub const DELAY_LENGTH: usize = 8; pub const NODE_META_INFO_SIZE: usize =
43 NODE_ADDRESS_LENGTH + FLAG_LENGTH + DELAY_LENGTH + VERSION_LENGTH; pub const FINAL_NODE_META_INFO_LENGTH: usize =
45 DESTINATION_ADDRESS_LENGTH + IDENTIFIER_LENGTH + FLAG_LENGTH + VERSION_LENGTH; pub const FLAG_LENGTH: usize = 1;
47pub const PAYLOAD_SIZE: usize = 1024;
48pub const VERSION_LENGTH: usize = 3; #[deprecated(note = "use EXPANDED_SHARED_SECRET_HKDF_INFO instead")]
52pub const HKDF_INPUT_SEED: &[u8] = EXPANDED_SHARED_SECRET_HKDF_INFO;
53
54pub const EXPANDED_SHARED_SECRET_HKDF_INFO: &[u8] =
56 b"Dwste mou enan moxlo arketa makru kai ena upomoxlio gia na ton topothetisw kai tha kinisw thn gh.";
57
58pub const EXPANDED_SHARED_SECRET_HKDF_SALT: &[u8] = b"";
62
63pub const PAYLOAD_KEY_HKDF_INFO: &[u8] = b"sphinx-payload-key-V01-CS01-HKDF:SHA256-INFO";
64pub const PAYLOAD_KEY_HKDF_SALT: &[u8] = b"sphinx-payload-key-V01-CS01-HKDF:SHA256-SALT";
65
66pub type HeaderIntegrityMacSize = U16;
67
68pub type HeaderIntegrityHmacAlgorithm = Sha256;
70
71#[cfg(test)]
72mod tests {
73 use super::*;
74 use digest::generic_array::typenum::Unsigned;
75
76 #[test]
77 fn generic_type_sizes_are_consistent_with_defined_constants() {
78 assert_eq!(
79 HeaderIntegrityMacSize::to_usize(),
80 HEADER_INTEGRITY_MAC_SIZE
81 )
82 }
83}