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

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