Skip to content

Latest commit

 

History

History
160 lines (124 loc) · 3.69 KB

stream.md

File metadata and controls

160 lines (124 loc) · 3.69 KB

Stream ciphers

#include <maid/stream.h>

Internal Interface

struct maid_stream_def Type that defines a stream cipher algorithm

External Interface

maid_stream Opaque type that contains the state of a stream cipher
maid_stream *maid_stream_new(struct maid_stream_def def, const u8 *restrict key, const u8 *restrict nonce, u64 counter) Creates a stream cipher instance

Parameters

name description
def Algorithm definition
key Algorithm-dependent
nonce Algorithm-dependent
counter Algorithm-dependent

Return value

case description
Success maid_stream instance
Failure NULL
maid_stream *maid_stream_del(maid_stream *st) Deletes a stream cipher instance

Parameters

name description
st maid_stream instance

Return value

case description
Always NULL
void maid_stream_renew(maid_stream *st, const u8 *restrict key, const u8 *restrict nonce, u64 counter) Recreates a stream cipher instance

Parameters

name description
st maid_stream instance
key Algorithm-dependent
nonce Algorithm-dependent
counter Algorithm-dependent
void maid_stream_xor(maid_stream *st, u8 *buffer, size_t size) Generates keystream, and applies it with a xor operation

Parameters

name description
st maid_stream instance
buffer Memory to be ciphered
size Size of the operation

External Algorithms

const struct maid_stream_def maid_chacha20 Chacha20 stream cipher (IETF version)

Parameters

name description
key 256-bit key
nonce 96-bit nonce
counter 0 to 2^32

Example Code

#include <stdio.h>
#include <stdlib.h>

#include <maid/stream.h>

int main(void)
{
    u8 key[32] = {0};
    u8 iv [16] = {0};

    maid_stream *st = maid_stream_new(maid_chacha20, key, iv, 0);

    u8 data[64] = {0};
    if (st)
        maid_stream_xor(st, data, sizeof(data));

    maid_stream_del(st);

    for (size_t i = 0; i < sizeof(data); i++)
        printf("%02x", data[i]);
    printf("\n");

    return EXIT_SUCCESS;
}

Without installation:

cc -static -Iinclude example.c -Lbuild -lmaid

With installation:

cc example.c -lmaid