From fd6ada706fe3d9fa91141bdd14e12529e93df42e Mon Sep 17 00:00:00 2001 From: Tim Segers Date: Fri, 31 Oct 2025 18:36:13 +0100 Subject: Add diagrams --- src/tweetpipe.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src') diff --git a/src/tweetpipe.c b/src/tweetpipe.c index f146cd7..b74bbaf 100644 --- a/src/tweetpipe.c +++ b/src/tweetpipe.c @@ -76,14 +76,54 @@ stream_encrypt(Context *ctx) max_chunk_size = ctx->sizeof_buf - 4 - crypto_secretbox_NONCEBYTES + crypto_secretbox_BOXZEROBYTES - crypto_secretbox_ZEROBYTES; assert(max_chunk_size <= 0x7fffffff); chunk_id = 0; + /* + * L: chunk_size + * ?: Undefined + * 0: 0 bytes + * M: Message + * C: Ciphertext + * N: Nonce + * + * load message and chunk_size into buffer: + * + * +- chunk_size_p + * | +- chunk_nonce + * | | +- chunk_base +- chunk_msg + * | | | | + * 0 4 12 28 44 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... + * |LLL|???????|000000000000000|000000000000000|MMMMMMMMMMMMMMMMMM + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... + * | 4 | 8 | 16 | 16 | chunk_size + * | ZEROBYTES | + * | BOXZEROBYTES | + * | NONCEBYTES | + * | NB-BZ | + */ while ((chunk_size = safe_read_partial(ctx->fd_in, chunk_msg, max_chunk_size)) >= 0) { STORE32_LE(chunk_size_p, (uint32_t) chunk_size); memzero(chunk_nonce, crypto_secretbox_NONCEBYTES - crypto_secretbox_BOXZEROBYTES + crypto_secretbox_ZEROBYTES); randombytes(nonce, crypto_secretbox_NONCEBYTES); + /* + * encrypt with crypto_secretbox() + * + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... + * |LLL|???????|000000000000000|CCCCCCCCCCCCCCC|CCCCCCCCCCCCCCCCCC + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... + * | 4 | 8 | 16 | 16 | chunk_size + */ if (crypto_secretbox(chunk_base, chunk_base, chunk_size + crypto_secretbox_ZEROBYTES, nonce, ctx->key) != 0) { die(0, "Encryption error"); } + /* + * copy nonce into empty space: + * + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... + * |LLL|NNNNNNN|NNNNNNNNNNNNNNN|CCCCCCCCCCCCCCC|CCCCCCCCCCCCCCCCCC + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... + * | 4 | 8 | 16 | 16 | chunk_size + */ memcpy(chunk_nonce, nonce, crypto_secretbox_NONCEBYTES); if (safe_write(ctx->fd_out, chunk_size_p, 4 + crypto_secretbox_NONCEBYTES - crypto_secretbox_BOXZEROBYTES + crypto_secretbox_ZEROBYTES + chunk_size, -1) < 0) { -- cgit v1.2.3-70-g09d2