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

rdobuilder 775784
rdobuilder 775784
#define TEST_NAME "secretbox_easy"
rdobuilder 775784
#include "cmptest.h"
rdobuilder 775784
rdobuilder 775784
static unsigned char firstkey[32] = { 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
static unsigned char nonce[24] = { 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
static unsigned char m[131] = {
rdobuilder 775784
    0xbe, 0x07, 0x5f, 0xc5, 0x3c, 0x81, 0xf2, 0xd5, 0xcf, 0x14, 0x13, 0x16,
rdobuilder 775784
    0xeb, 0xeb, 0x0c, 0x7b, 0x52, 0x28, 0xc5, 0x2a, 0x4c, 0x62, 0xcb, 0xd4,
rdobuilder 775784
    0x4b, 0x66, 0x84, 0x9b, 0x64, 0x24, 0x4f, 0xfc, 0xe5, 0xec, 0xba, 0xaf,
rdobuilder 775784
    0x33, 0xbd, 0x75, 0x1a, 0x1a, 0xc7, 0x28, 0xd4, 0x5e, 0x6c, 0x61, 0x29,
rdobuilder 775784
    0x6c, 0xdc, 0x3c, 0x01, 0x23, 0x35, 0x61, 0xf4, 0x1d, 0xb6, 0x6c, 0xce,
rdobuilder 775784
    0x31, 0x4a, 0xdb, 0x31, 0x0e, 0x3b, 0xe8, 0x25, 0x0c, 0x46, 0xf0, 0x6d,
rdobuilder 775784
    0xce, 0xea, 0x3a, 0x7f, 0xa1, 0x34, 0x80, 0x57, 0xe2, 0xf6, 0x55, 0x6a,
rdobuilder 775784
    0xd6, 0xb1, 0x31, 0x8a, 0x02, 0x4a, 0x83, 0x8f, 0x21, 0xaf, 0x1f, 0xde,
rdobuilder 775784
    0x04, 0x89, 0x77, 0xeb, 0x48, 0xf5, 0x9f, 0xfd, 0x49, 0x24, 0xca, 0x1c,
rdobuilder 775784
    0x60, 0x90, 0x2e, 0x52, 0xf0, 0xa0, 0x89, 0xbc, 0x76, 0x89, 0x70, 0x40,
rdobuilder 775784
    0xe0, 0x82, 0xf9, 0x37, 0x76, 0x38, 0x48, 0x64, 0x5e, 0x07, 0x05
rdobuilder 775784
};
rdobuilder 775784
rdobuilder 775784
int
rdobuilder 775784
main(void)
rdobuilder 775784
{
rdobuilder 775784
    unsigned char *c;
rdobuilder 775784
    unsigned char *mac;
rdobuilder 775784
    size_t         i;
rdobuilder 775784
rdobuilder 775784
    c   = (unsigned char *) sodium_malloc(131 + crypto_secretbox_MACBYTES + 1);
rdobuilder 775784
    mac = (unsigned char *) sodium_malloc(crypto_secretbox_MACBYTES);
rdobuilder 775784
    assert(c != NULL && mac != NULL);
rdobuilder 775784
rdobuilder 775784
    crypto_secretbox_easy(c, m, 131, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
rdobuilder 775784
    crypto_secretbox_detached(c, mac, m, 131, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < crypto_secretbox_MACBYTES; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) mac[i]);
rdobuilder 775784
    }
rdobuilder 775784
    for (i = 0; i < 131; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
rdobuilder 775784
    /* Same test, with c and m overlapping */
rdobuilder 775784
rdobuilder 775784
    memcpy(c + 1, m, 131);
rdobuilder 775784
    crypto_secretbox_easy(c, c + 1, 131, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
rdobuilder 775784
    memcpy(c, m, 131);
rdobuilder 775784
    crypto_secretbox_easy(c + 1, c, 131, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i + 1]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
rdobuilder 775784
    memcpy(c, m, 131);
rdobuilder 775784
    crypto_secretbox_easy(c, c, 131, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < 131 + crypto_secretbox_MACBYTES; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
rdobuilder 775784
    assert(crypto_secretbox_easy(c, m, 0, nonce, firstkey) == 0);
rdobuilder 775784
rdobuilder 775784
    /* Null message */
rdobuilder 775784
rdobuilder 775784
    crypto_secretbox_easy(c, c, 0, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < crypto_secretbox_MACBYTES + 1; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
    if (crypto_secretbox_open_easy(c, c, crypto_secretbox_MACBYTES, nonce,
rdobuilder 775784
                                   firstkey) != 0) {
rdobuilder 775784
        printf("Null crypto_secretbox_open_easy() failed\n");
rdobuilder 775784
    }
rdobuilder 775784
    for (i = 0; i < crypto_secretbox_MACBYTES + 1; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
    c[randombytes_uniform(crypto_secretbox_MACBYTES)]++;
rdobuilder 775784
    if (crypto_secretbox_open_easy(c, c, crypto_secretbox_MACBYTES, nonce,
rdobuilder 775784
                                   firstkey) != -1) {
rdobuilder 775784
        printf("Null tampered crypto_secretbox_open_easy() failed\n");
rdobuilder 775784
    }
rdobuilder 775784
rdobuilder 775784
    /* No overlap, but buffers are next to each other */
rdobuilder 775784
rdobuilder 775784
    memset(c, 0, 131 + crypto_secretbox_MACBYTES + 1);
rdobuilder 775784
    memcpy(c, m, 20);
rdobuilder 775784
    crypto_secretbox_easy(c, c + 10, 10, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < 10 + crypto_secretbox_MACBYTES; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
rdobuilder 775784
    memset(c, 0, 131 + crypto_secretbox_MACBYTES + 1);
rdobuilder 775784
    memcpy(c, m, 20);
rdobuilder 775784
    crypto_secretbox_easy(c + 10, c, 10, nonce, firstkey);
rdobuilder 775784
    for (i = 0; i < 10 + crypto_secretbox_MACBYTES; ++i) {
rdobuilder 775784
        printf(",0x%02x", (unsigned int) c[i]);
rdobuilder 775784
    }
rdobuilder 775784
    printf("\n");
rdobuilder 775784
rdobuilder 775784
    sodium_free(mac);
rdobuilder 775784
    sodium_free(c);
rdobuilder 775784
rdobuilder 775784
    return 0;
rdobuilder 775784
}