libsodium 1.0.8
[tomato.git] / release / src / router / libsodium / test / default / secretbox_easy2.c
blob2fd6d71eaa0fb13f5f6c9fee374ca2fcdc648556
2 #define TEST_NAME "secretbox_easy2"
3 #include "cmptest.h"
5 int main(void)
7 unsigned char *m;
8 unsigned char *m2;
9 unsigned char *c;
10 unsigned char *nonce;
11 unsigned char *k;
12 unsigned char *mac;
13 size_t mlen;
14 size_t i;
16 mlen = (size_t) randombytes_uniform((uint32_t) 10000) + 1U;
17 m = (unsigned char *) sodium_malloc(mlen);
18 m2 = (unsigned char *) sodium_malloc(mlen);
19 c = (unsigned char *) sodium_malloc(crypto_secretbox_MACBYTES + mlen);
20 nonce = (unsigned char *) sodium_malloc(crypto_secretbox_NONCEBYTES);
21 k = (unsigned char *) sodium_malloc(crypto_secretbox_KEYBYTES);
22 mac = (unsigned char *) sodium_malloc(crypto_secretbox_MACBYTES);
23 randombytes_buf(k, crypto_secretbox_KEYBYTES);
24 randombytes_buf(m, (unsigned long long) mlen);
25 randombytes_buf(nonce, crypto_secretbox_NONCEBYTES);
26 crypto_secretbox_easy(c, m, (unsigned long long) mlen, nonce, k);
27 if (crypto_secretbox_open_easy(m2, c,
28 (unsigned long long) mlen + crypto_secretbox_MACBYTES,
29 nonce, k) != 0) {
30 printf("crypto_secretbox_open_easy() failed\n");
32 printf("%d\n", memcmp(m, m2, mlen));
34 for (i = 0; i < mlen + crypto_secretbox_MACBYTES - 1; i++) {
35 if (crypto_secretbox_open_easy(m2, c, (unsigned long long) i,
36 nonce, k) == 0) {
37 printf("short open() should have failed\n");
38 return 1;
41 crypto_secretbox_detached(c, mac, m, (unsigned long long) mlen, nonce, k);
42 if (crypto_secretbox_open_detached(m2, c, mac, (unsigned long long) mlen,
43 nonce, k) != 0) {
44 printf("crypto_secretbox_open_detached() failed\n");
46 printf("%d\n", memcmp(m, m2, mlen));
48 memcpy(c, m, mlen);
49 crypto_secretbox_easy(c, c, (unsigned long long) mlen, nonce, k);
50 printf("%d\n", memcmp(m, c, mlen) == 0);
51 printf("%d\n", memcmp(m, c + crypto_secretbox_MACBYTES, mlen) == 0);
52 if (crypto_secretbox_open_easy(c, c,
53 (unsigned long long) mlen + crypto_secretbox_MACBYTES,
54 nonce, k) != 0) {
55 printf("crypto_secretbox_open_easy() failed\n");
57 printf("%d\n", memcmp(m, c, mlen));
59 sodium_free(m);
60 sodium_free(m2);
61 sodium_free(c);
62 sodium_free(nonce);
63 sodium_free(k);
64 sodium_free(mac);
66 return 0;