Blame SOURCES/libsodium-1.0.18/test/default/stream.c

rdobuilder 775784
rdobuilder 775784
#define TEST_NAME "stream"
rdobuilder 775784
#include "cmptest.h"
rdobuilder 775784
rdobuilder 775784
static const unsigned char firstkey[32] = {
rdobuilder 775784
    0x1b, 0x27, 0x55, 0x64, 0x73, 0xe9, 0x85,
rdobuilder 775784
    0xd4, 0x62, 0xcd, 0x51, 0x19, 0x7a, 0x9a,
rdobuilder 775784
    0x46, 0xc7, 0x60, 0x09, 0x54, 0x9e, 0xac,
rdobuilder 775784
    0x64, 0x74, 0xf2, 0x06, 0xc4, 0xee, 0x08,
rdobuilder 775784
    0x44, 0xf6, 0x83, 0x89
rdobuilder 775784
};
rdobuilder 775784
rdobuilder 775784
static const unsigned char nonce[24] = {
rdobuilder 775784
    0x69, 0x69, 0x6e, 0xe9, 0x55, 0xb6,
rdobuilder 775784
    0x2b, 0x73, 0xcd, 0x62, 0xbd, 0xa8,
rdobuilder 775784
    0x75, 0xfc, 0x73, 0xd6, 0x82, 0x19,
rdobuilder 775784
    0xe0, 0x03, 0x6b, 0x7a, 0x0b, 0x37
rdobuilder 775784
};
rdobuilder 775784
rdobuilder 775784
int
rdobuilder 775784
main(void)
rdobuilder 775784
{
rdobuilder 775784
    unsigned char  h[32];
rdobuilder 775784
    char          *hex;
rdobuilder 775784
    unsigned char *output;
rdobuilder 775784
    size_t         sizeof_hex = 17 * 64 * 2 + 1;
rdobuilder 775784
    size_t         sizeof_output = 4194304;
rdobuilder 775784
    int            i;
rdobuilder 775784
rdobuilder 775784
    output = (unsigned char *) sodium_malloc(sizeof_output);
rdobuilder 775784
    hex = (char *) sodium_malloc(sizeof_hex);
rdobuilder 775784
rdobuilder 775784
    randombytes_buf(output, sizeof_output);
rdobuilder 775784
    crypto_stream(output, sizeof_output, nonce, firstkey);
rdobuilder 775784
    crypto_hash_sha256(h, output, sizeof_output);
rdobuilder 775784
    sodium_bin2hex(hex, sizeof_hex, h, sizeof h);
rdobuilder 775784
    printf("%s\n", hex);
rdobuilder 775784
rdobuilder 775784
    assert(sizeof_output > 4000);
rdobuilder 775784
rdobuilder 775784
    crypto_stream_xsalsa20_xor_ic(output, output, 4000, nonce, 0U, firstkey);
rdobuilder 775784
    for (i = 0; i < 4000; i++) {
rdobuilder 775784
        assert(output[i] == 0);
rdobuilder 775784
    }
rdobuilder 775784
    crypto_stream_xsalsa20_xor_ic(output, output, 4000, nonce, 1U, firstkey);
rdobuilder 775784
    crypto_hash_sha256(h, output, sizeof_output);
rdobuilder 775784
    sodium_bin2hex(hex, sizeof_hex, h, sizeof h);
rdobuilder 775784
    printf("%s\n", hex);
rdobuilder 775784
rdobuilder 775784
    for (i = 0; i < 64; i++) {
rdobuilder 775784
        memset(output, i, 64);
rdobuilder 775784
        crypto_stream(output, (int) (i & 0xff), nonce, firstkey);
rdobuilder 775784
        sodium_bin2hex(hex, sizeof_hex, output, 64);
rdobuilder 775784
        printf("%s\n", hex);
rdobuilder 775784
    }
rdobuilder 775784
rdobuilder 775784
    memset(output, 0, 192);
rdobuilder 775784
    crypto_stream_xsalsa20_xor_ic(output, output, 192, nonce,
rdobuilder 775784
                                  (1ULL << 32) - 1ULL, firstkey);
rdobuilder 775784
    sodium_bin2hex(hex, 192 * 2 + 1, output, 192);
rdobuilder 775784
    printf("%s\n", hex);
rdobuilder 775784
rdobuilder 775784
    for (i = 16; i > 0; i--) {
rdobuilder 775784
        memset(output, 0, 17 * 64);
rdobuilder 775784
        crypto_stream_xsalsa20_xor_ic(output, output, 17 * 64, nonce,
rdobuilder 775784
                                      (1ULL << 32) - (unsigned long long) i,
rdobuilder 775784
                                      firstkey);
rdobuilder 775784
        sodium_bin2hex(hex, 2 * 17 * 64 + 1, output, 17 * 64);
rdobuilder 775784
        printf("%s\n", hex);
rdobuilder 775784
    }
rdobuilder 775784
rdobuilder 775784
    sodium_free(hex);
rdobuilder 775784
    sodium_free(output);
rdobuilder 775784
rdobuilder 775784
    assert(crypto_stream_keybytes() > 0U);
rdobuilder 775784
    assert(crypto_stream_noncebytes() > 0U);
rdobuilder 775784
    assert(crypto_stream_messagebytes_max() > 0U);
rdobuilder 775784
    assert(strcmp(crypto_stream_primitive(), "xsalsa20") == 0);
rdobuilder 775784
    assert(crypto_stream_keybytes() == crypto_stream_xsalsa20_keybytes());
rdobuilder 775784
    assert(crypto_stream_noncebytes() == crypto_stream_xsalsa20_noncebytes());
rdobuilder 775784
    assert(crypto_stream_messagebytes_max() == crypto_stream_xsalsa20_messagebytes_max());
rdobuilder 775784
rdobuilder 775784
    return 0;
rdobuilder 775784
}