1*0ac341f1SConrad Meyer
2*0ac341f1SConrad Meyer #define TEST_NAME "box8"
3*0ac341f1SConrad Meyer #include "cmptest.h"
4*0ac341f1SConrad Meyer
5*0ac341f1SConrad Meyer static unsigned char alicesk[crypto_box_SECRETKEYBYTES];
6*0ac341f1SConrad Meyer static unsigned char alicepk[crypto_box_PUBLICKEYBYTES];
7*0ac341f1SConrad Meyer static unsigned char bobsk[crypto_box_SECRETKEYBYTES];
8*0ac341f1SConrad Meyer static unsigned char bobpk[crypto_box_PUBLICKEYBYTES];
9*0ac341f1SConrad Meyer static unsigned char n[crypto_box_NONCEBYTES];
10*0ac341f1SConrad Meyer
11*0ac341f1SConrad Meyer int
main(void)12*0ac341f1SConrad Meyer main(void)
13*0ac341f1SConrad Meyer {
14*0ac341f1SConrad Meyer unsigned char *m;
15*0ac341f1SConrad Meyer unsigned char *c;
16*0ac341f1SConrad Meyer unsigned char *m2;
17*0ac341f1SConrad Meyer size_t mlen;
18*0ac341f1SConrad Meyer size_t mlen_max = 1000;
19*0ac341f1SConrad Meyer size_t i;
20*0ac341f1SConrad Meyer int faults;
21*0ac341f1SConrad Meyer int ret;
22*0ac341f1SConrad Meyer
23*0ac341f1SConrad Meyer m = (unsigned char *) sodium_malloc(mlen_max);
24*0ac341f1SConrad Meyer c = (unsigned char *) sodium_malloc(mlen_max);
25*0ac341f1SConrad Meyer m2 = (unsigned char *) sodium_malloc(mlen_max);
26*0ac341f1SConrad Meyer crypto_box_keypair(alicepk, alicesk);
27*0ac341f1SConrad Meyer crypto_box_keypair(bobpk, bobsk);
28*0ac341f1SConrad Meyer for (mlen = 0; mlen + crypto_box_ZEROBYTES <= mlen_max; mlen++) {
29*0ac341f1SConrad Meyer randombytes_buf(n, crypto_box_NONCEBYTES);
30*0ac341f1SConrad Meyer randombytes_buf(m + crypto_box_ZEROBYTES, mlen);
31*0ac341f1SConrad Meyer ret = crypto_box(c, m, mlen + crypto_box_ZEROBYTES, n, bobpk, alicesk);
32*0ac341f1SConrad Meyer assert(ret == 0);
33*0ac341f1SConrad Meyer #ifdef BROWSER_TESTS
34*0ac341f1SConrad Meyer faults = 1;
35*0ac341f1SConrad Meyer #else
36*0ac341f1SConrad Meyer faults = 5;
37*0ac341f1SConrad Meyer #endif
38*0ac341f1SConrad Meyer while (faults > 0) {
39*0ac341f1SConrad Meyer c[rand() % (mlen + crypto_box_ZEROBYTES)] = rand();
40*0ac341f1SConrad Meyer if (crypto_box_open(m2, c, mlen + crypto_box_ZEROBYTES, n, alicepk,
41*0ac341f1SConrad Meyer bobsk) == 0) {
42*0ac341f1SConrad Meyer for (i = 0; i < mlen + crypto_box_ZEROBYTES; ++i) {
43*0ac341f1SConrad Meyer if (m2[i] != m[i]) {
44*0ac341f1SConrad Meyer printf("forgery\n");
45*0ac341f1SConrad Meyer return 100;
46*0ac341f1SConrad Meyer }
47*0ac341f1SConrad Meyer }
48*0ac341f1SConrad Meyer } else {
49*0ac341f1SConrad Meyer faults--;
50*0ac341f1SConrad Meyer }
51*0ac341f1SConrad Meyer }
52*0ac341f1SConrad Meyer }
53*0ac341f1SConrad Meyer sodium_free(m);
54*0ac341f1SConrad Meyer sodium_free(c);
55*0ac341f1SConrad Meyer sodium_free(m2);
56*0ac341f1SConrad Meyer
57*0ac341f1SConrad Meyer return 0;
58*0ac341f1SConrad Meyer }
59