Path: blob/main/sys/contrib/libsodium/test/default/box_easy2.c
48378 views
1#define TEST_NAME "box_easy2"2#include "cmptest.h"34static const unsigned char small_order_p[crypto_box_PUBLICKEYBYTES] = {50xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae, 0x16, 0x56, 0xe3,60xfa, 0xf1, 0x9f, 0xc4, 0x6a, 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32,70xb1, 0xfd, 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x008};910int11main(void)12{13unsigned char *alicepk;14unsigned char *alicesk;15unsigned char *bobpk;16unsigned char *bobsk;17unsigned char *mac;18unsigned char *nonce;19unsigned char *k1;20unsigned char *k2;21unsigned char *m;22unsigned char *m2;23unsigned char *c;24size_t mlen;25size_t i;26size_t m_size;27size_t m2_size;28size_t c_size;29int ret;3031m2_size = m_size = 7U + randombytes_uniform(1000);32c_size = crypto_box_MACBYTES + m_size;33m = (unsigned char *) sodium_malloc(m_size);34m2 = (unsigned char *) sodium_malloc(m2_size);35c = (unsigned char *) sodium_malloc(c_size);36alicepk = (unsigned char *) sodium_malloc(crypto_box_PUBLICKEYBYTES);37alicesk = (unsigned char *) sodium_malloc(crypto_box_SECRETKEYBYTES);38bobpk = (unsigned char *) sodium_malloc(crypto_box_PUBLICKEYBYTES);39bobsk = (unsigned char *) sodium_malloc(crypto_box_SECRETKEYBYTES);40mac = (unsigned char *) sodium_malloc(crypto_box_MACBYTES);41nonce = (unsigned char *) sodium_malloc(crypto_box_NONCEBYTES);42k1 = (unsigned char *) sodium_malloc(crypto_box_BEFORENMBYTES);43k2 = (unsigned char *) sodium_malloc(crypto_box_BEFORENMBYTES);44crypto_box_keypair(alicepk, alicesk);45crypto_box_keypair(bobpk, bobsk);46mlen = (size_t) randombytes_uniform((uint32_t) m_size) + 1U;47randombytes_buf(m, mlen);48randombytes_buf(nonce, crypto_box_NONCEBYTES);49ret = crypto_box_easy(c, m, mlen, nonce, bobpk, alicesk);50assert(ret == 0);51if (crypto_box_open_easy(m2, c,52(unsigned long long) mlen + crypto_box_MACBYTES,53nonce, alicepk, bobsk) != 0) {54printf("open() failed");55return 1;56}57printf("%d\n", memcmp(m, m2, mlen));5859for (i = 0; i < mlen + crypto_box_MACBYTES - 1; i++) {60if (crypto_box_open_easy(m2, c, (unsigned long long) i, nonce, alicepk,61bobsk) == 0) {62printf("short open() should have failed");63return 1;64}65}66memcpy(c, m, mlen);67ret =68crypto_box_easy(c, c, (unsigned long long) mlen, nonce, bobpk, alicesk);69assert(ret == 0);70printf("%d\n", memcmp(m, c, mlen) == 0);71printf("%d\n", memcmp(m, c + crypto_box_MACBYTES, mlen) == 0);72if (crypto_box_open_easy(c, c,73(unsigned long long) mlen + crypto_box_MACBYTES,74nonce, alicepk, bobsk) != 0) {75printf("crypto_box_open_easy() failed\n");76}7778ret = crypto_box_beforenm(k1, small_order_p, bobsk);79assert(ret == -1);80ret = crypto_box_beforenm(k2, small_order_p, alicesk);81assert(ret == -1);8283ret = crypto_box_beforenm(k1, alicepk, bobsk);84assert(ret == 0);85ret = crypto_box_beforenm(k2, bobpk, alicesk);86assert(ret == 0);8788memset(m2, 0, m2_size);8990if (crypto_box_easy_afternm(c, m, 0, nonce, k1) != 0) {91printf(92"crypto_box_easy_afternm() with a null ciphertext should have "93"worked\n");94}95crypto_box_easy_afternm(c, m, (unsigned long long) mlen, nonce, k1);96if (crypto_box_open_easy_afternm(97m2, c, (unsigned long long) mlen + crypto_box_MACBYTES, nonce,98k2) != 0) {99printf("crypto_box_open_easy_afternm() failed\n");100}101printf("%d\n", memcmp(m, m2, mlen));102if (crypto_box_open_easy_afternm(m2, c, crypto_box_MACBYTES - 1U, nonce,103k2) == 0) {104printf(105"crypto_box_open_easy_afternm() with a huge ciphertext should have "106"failed\n");107}108memset(m2, 0, m2_size);109ret = crypto_box_detached(c, mac, m, (unsigned long long) mlen, nonce,110small_order_p, bobsk);111assert(ret == -1);112ret = crypto_box_detached(c, mac, m, (unsigned long long) mlen, nonce,113alicepk, bobsk);114assert(ret == 0);115if (crypto_box_open_detached(m2, c, mac, (unsigned long long) mlen, nonce,116small_order_p, alicesk) != -1) {117printf("crypto_box_open_detached() with a weak key passed\n");118}119if (crypto_box_open_detached(m2, c, mac, (unsigned long long) mlen, nonce,120bobpk, alicesk) != 0) {121printf("crypto_box_open_detached() failed\n");122}123printf("%d\n", memcmp(m, m2, mlen));124125memset(m2, 0, m2_size);126crypto_box_detached_afternm(c, mac, m, (unsigned long long) mlen, nonce,127k1);128if (crypto_box_open_detached_afternm(m2, c, mac, (unsigned long long) mlen,129nonce, k2) != 0) {130printf("crypto_box_open_detached_afternm() failed\n");131}132printf("%d\n", memcmp(m, m2, mlen));133134sodium_free(alicepk);135sodium_free(alicesk);136sodium_free(bobpk);137sodium_free(bobsk);138sodium_free(mac);139sodium_free(nonce);140sodium_free(k1);141sodium_free(k2);142sodium_free(m);143sodium_free(m2);144sodium_free(c);145printf("OK\n");146147return 0;148}149150151