aven-protocol 0.1.0

Storage-independent encrypted sync protocol for Aven
Documentation
//! Ordinary encrypted image transport.
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Ticket {
    pub reservation: [u8; 32],
}
#[derive(Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub enum Operation {
    Declare {
        workspace: String,
        #[serde(with = "crate::base64_bytes")]
        descriptor: Vec<u8>,
    },
    Status {
        workspace: String,
        object: [u8; 32],
        descriptor_commitment: [u8; 32],
    },
    Put {
        workspace: String,
        object: [u8; 32],
        descriptor_commitment: [u8; 32],
        reservation: [u8; 32],
        index: usize,
        #[serde(with = "crate::base64_bytes")]
        record: Vec<u8>,
    },
    Complete {
        workspace: String,
        object: [u8; 32],
        descriptor_commitment: [u8; 32],
        reservation: [u8; 32],
    },
    Read {
        workspace: String,
        object: [u8; 32],
        descriptor_commitment: [u8; 32],
        index: usize,
    },
    Release {
        workspace: String,
        object: [u8; 32],
        descriptor_commitment: [u8; 32],
        reservation: [u8; 32],
    },
}
#[derive(Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Status {
    pub complete: bool,
    pub missing: Vec<usize>,
    pub reservation: Option<[u8; 32]>,
    pub expires_at: Option<i64>,
}
#[derive(Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub enum Reply {
    Status(Status),
    Chunk(#[serde(with = "crate::base64_bytes")] Vec<u8>),
    Unavailable,
    Done,
}

pub const PATH: &str = "/e2ee/images/v1";
pub const DESCRIPTOR_LIMIT: usize = 1984;
pub const IMAGE_BYTES: usize = 25 * 1048576;
pub const CHUNK_BYTES: usize = 1048576 + 222;
pub const TRANSFER_BYTES: usize = IMAGE_BYTES + 25 * 222;
pub const HTTP_LIMIT: usize = crate::base64_bytes::encoded_len(CHUNK_BYTES) + 16384;