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

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