lxmf-wire 0.2.0

Core LXMF wire format, message primitives, and identity helpers for LXMF-rs.
Documentation
pub const FIELD_COMMANDS: u8 = 0x09;

pub const DESTINATION_LENGTH: usize = 16;
pub const SIGNATURE_LENGTH: usize = 64;
pub const TIMESTAMP_SIZE: usize = 8;
pub const STRUCT_OVERHEAD: usize = 8;
pub const LXMF_OVERHEAD: usize =
    (2 * DESTINATION_LENGTH) + SIGNATURE_LENGTH + TIMESTAMP_SIZE + STRUCT_OVERHEAD;

pub const RETICULUM_MTU: usize = 500;
pub const RETICULUM_TRUNCATED_HASH_LENGTH_BYTES: usize = 16;
pub const RETICULUM_HEADER_MINSIZE: usize = 2 + 1 + RETICULUM_TRUNCATED_HASH_LENGTH_BYTES;
pub const RETICULUM_HEADER_MAXSIZE: usize = 2 + 1 + (RETICULUM_TRUNCATED_HASH_LENGTH_BYTES * 2);
pub const RETICULUM_IFAC_MIN_SIZE: usize = 1;
pub const RETICULUM_MDU: usize = RETICULUM_MTU - RETICULUM_HEADER_MAXSIZE - RETICULUM_IFAC_MIN_SIZE;
pub const RETICULUM_TOKEN_OVERHEAD: usize = 48;
pub const RETICULUM_AES_BLOCKSIZE: usize = 16;
pub const RETICULUM_KEYSIZE_DIV_16: usize = 32;

pub const ENCRYPTED_MDU: usize =
    ((RETICULUM_MDU - RETICULUM_TOKEN_OVERHEAD - RETICULUM_KEYSIZE_DIV_16)
        / RETICULUM_AES_BLOCKSIZE)
        * RETICULUM_AES_BLOCKSIZE
        - 1;
pub const PLAIN_MDU: usize = RETICULUM_MDU;
pub const LINK_PACKET_MDU: usize = ((RETICULUM_MTU
    - RETICULUM_IFAC_MIN_SIZE
    - RETICULUM_HEADER_MINSIZE
    - RETICULUM_TOKEN_OVERHEAD)
    / RETICULUM_AES_BLOCKSIZE)
    * RETICULUM_AES_BLOCKSIZE
    - 1;

pub const ENCRYPTED_PACKET_MDU: usize = ENCRYPTED_MDU + TIMESTAMP_SIZE;
pub const ENCRYPTED_PACKET_MAX_CONTENT: usize =
    ENCRYPTED_PACKET_MDU - LXMF_OVERHEAD + DESTINATION_LENGTH;
pub const LINK_PACKET_MAX_CONTENT: usize = LINK_PACKET_MDU - LXMF_OVERHEAD;
pub const PLAIN_PACKET_MAX_CONTENT: usize = PLAIN_MDU - LXMF_OVERHEAD + DESTINATION_LENGTH;

pub const QR_MAX_STORAGE: usize = 2953;
pub const URI_SCHEMA_LENGTH: usize = 3;
pub const PAPER_MDU: usize = ((QR_MAX_STORAGE - (URI_SCHEMA_LENGTH + 3)) * 6) / 8;