Home | History | Annotate | Line # | Download | only in default
      1  1.1  riastrad 
      2  1.1  riastrad #define TEST_NAME "aead_chacha20poly1305"
      3  1.1  riastrad #include "cmptest.h"
      4  1.1  riastrad 
      5  1.1  riastrad static int
      6  1.1  riastrad tv(void)
      7  1.1  riastrad {
      8  1.1  riastrad #undef  MLEN
      9  1.1  riastrad #define MLEN 10U
     10  1.1  riastrad #undef  ADLEN
     11  1.1  riastrad #define ADLEN 10U
     12  1.1  riastrad #undef  CLEN
     13  1.1  riastrad #define CLEN (MLEN + crypto_aead_chacha20poly1305_ABYTES)
     14  1.1  riastrad     static const unsigned char firstkey[crypto_aead_chacha20poly1305_KEYBYTES]
     15  1.1  riastrad         = { 0x42, 0x90, 0xbc, 0xb1, 0x54, 0x17, 0x35, 0x31, 0xf3, 0x14, 0xaf,
     16  1.1  riastrad             0x57, 0xf3, 0xbe, 0x3b, 0x50, 0x06, 0xda, 0x37, 0x1e, 0xce, 0x27,
     17  1.1  riastrad             0x2a, 0xfa, 0x1b, 0x5d, 0xbd, 0xd1, 0x10, 0x0a, 0x10, 0x07 };
     18  1.1  riastrad     static const unsigned char m[MLEN]
     19  1.1  riastrad         = { 0x86, 0xd0, 0x99, 0x74, 0x84, 0x0b, 0xde, 0xd2, 0xa5, 0xca };
     20  1.1  riastrad     static const unsigned char nonce[crypto_aead_chacha20poly1305_NPUBBYTES]
     21  1.1  riastrad         = { 0xcd, 0x7c, 0xf6, 0x7b, 0xe3, 0x9c, 0x79, 0x4a };
     22  1.1  riastrad     static const unsigned char ad[ADLEN]
     23  1.1  riastrad         = { 0x87, 0xe2, 0x29, 0xd4, 0x50, 0x08, 0x45, 0xa0, 0x79, 0xc0 };
     24  1.1  riastrad     unsigned char *c = (unsigned char *) sodium_malloc(CLEN);
     25  1.1  riastrad     unsigned char *detached_c = (unsigned char *) sodium_malloc(MLEN);
     26  1.1  riastrad     unsigned char *mac = (unsigned char *) sodium_malloc(crypto_aead_chacha20poly1305_ABYTES);
     27  1.1  riastrad     unsigned char *m2 = (unsigned char *) sodium_malloc(MLEN);
     28  1.1  riastrad     unsigned long long found_clen;
     29  1.1  riastrad     unsigned long long found_maclen;
     30  1.1  riastrad     unsigned long long m2len;
     31  1.1  riastrad     size_t i;
     32  1.1  riastrad 
     33  1.1  riastrad     crypto_aead_chacha20poly1305_encrypt(c, &found_clen, m, MLEN,
     34  1.1  riastrad                                          ad, ADLEN,
     35  1.1  riastrad                                          NULL, nonce, firstkey);
     36  1.1  riastrad     if (found_clen != CLEN) {
     37  1.1  riastrad         printf("found_clen is not properly set\n");
     38  1.1  riastrad     }
     39  1.1  riastrad     for (i = 0U; i < CLEN; ++i) {
     40  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
     41  1.1  riastrad         if (i % 8 == 7) {
     42  1.1  riastrad             printf("\n");
     43  1.1  riastrad         }
     44  1.1  riastrad     }
     45  1.1  riastrad     printf("\n");
     46  1.1  riastrad     crypto_aead_chacha20poly1305_encrypt_detached(detached_c,
     47  1.1  riastrad                                                   mac, &found_maclen,
     48  1.1  riastrad                                                   m, MLEN, ad, ADLEN,
     49  1.1  riastrad                                                   NULL, nonce, firstkey);
     50  1.1  riastrad     if (found_maclen != crypto_aead_chacha20poly1305_abytes()) {
     51  1.1  riastrad         printf("found_maclen is not properly set\n");
     52  1.1  riastrad     }
     53  1.1  riastrad     if (memcmp(detached_c, c, MLEN) != 0) {
     54  1.1  riastrad         printf("detached ciphertext is bogus\n");
     55  1.1  riastrad     }
     56  1.1  riastrad 
     57  1.1  riastrad     if (crypto_aead_chacha20poly1305_decrypt(m2, &m2len, NULL, c, CLEN,
     58  1.1  riastrad                                              ad, ADLEN,
     59  1.1  riastrad                                              nonce, firstkey) != 0) {
     60  1.1  riastrad         printf("crypto_aead_chacha20poly1305_decrypt() failed\n");
     61  1.1  riastrad     }
     62  1.1  riastrad     if (m2len != MLEN) {
     63  1.1  riastrad         printf("m2len is not properly set\n");
     64  1.1  riastrad     }
     65  1.1  riastrad     if (memcmp(m, m2, MLEN) != 0) {
     66  1.1  riastrad         printf("m != m2\n");
     67  1.1  riastrad     }
     68  1.1  riastrad     memset(m2, 0, m2len);
     69  1.1  riastrad     assert(crypto_aead_chacha20poly1305_decrypt_detached(NULL, NULL,
     70  1.1  riastrad                                                          c, MLEN, mac,
     71  1.1  riastrad                                                          ad, ADLEN,
     72  1.1  riastrad                                                          nonce, firstkey) == 0);
     73  1.1  riastrad     if (crypto_aead_chacha20poly1305_decrypt_detached(m2, NULL,
     74  1.1  riastrad                                                       c, MLEN, mac,
     75  1.1  riastrad                                                       ad, ADLEN,
     76  1.1  riastrad                                                       nonce, firstkey) != 0) {
     77  1.1  riastrad         printf("crypto_aead_chacha20poly1305_decrypt_detached() failed\n");
     78  1.1  riastrad     }
     79  1.1  riastrad     if (memcmp(m, m2, MLEN) != 0) {
     80  1.1  riastrad         printf("detached m != m2\n");
     81  1.1  riastrad     }
     82  1.1  riastrad 
     83  1.1  riastrad     for (i = 0U; i < CLEN; i++) {
     84  1.1  riastrad         c[i] ^= (i + 1U);
     85  1.1  riastrad         if (crypto_aead_chacha20poly1305_decrypt(m2, NULL, NULL, c, CLEN,
     86  1.1  riastrad                                                  ad, ADLEN, nonce, firstkey)
     87  1.1  riastrad             == 0 || memcmp(m, m2, MLEN) == 0) {
     88  1.1  riastrad             printf("message can be forged\n");
     89  1.1  riastrad         }
     90  1.1  riastrad         c[i] ^= (i + 1U);
     91  1.1  riastrad     }
     92  1.1  riastrad 
     93  1.1  riastrad     crypto_aead_chacha20poly1305_encrypt(c, &found_clen, m, MLEN,
     94  1.1  riastrad                                          NULL, 0U, NULL, nonce, firstkey);
     95  1.1  riastrad     if (found_clen != CLEN) {
     96  1.1  riastrad         printf("found_clen is not properly set (adlen=0)\n");
     97  1.1  riastrad     }
     98  1.1  riastrad     for (i = 0U; i < CLEN; ++i) {
     99  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
    100  1.1  riastrad         if (i % 8 == 7) {
    101  1.1  riastrad             printf("\n");
    102  1.1  riastrad         }
    103  1.1  riastrad     }
    104  1.1  riastrad     printf("\n");
    105  1.1  riastrad 
    106  1.1  riastrad     if (crypto_aead_chacha20poly1305_decrypt(m2, &m2len, NULL, c, CLEN,
    107  1.1  riastrad                                              NULL, 0U, nonce, firstkey) != 0) {
    108  1.1  riastrad         printf("crypto_aead_chacha20poly1305_decrypt() failed (adlen=0)\n");
    109  1.1  riastrad     }
    110  1.1  riastrad     if (m2len != MLEN) {
    111  1.1  riastrad         printf("m2len is not properly set (adlen=0)\n");
    112  1.1  riastrad     }
    113  1.1  riastrad     if (memcmp(m, m2, MLEN) != 0) {
    114  1.1  riastrad         printf("m != m2 (adlen=0)\n");
    115  1.1  riastrad     }
    116  1.1  riastrad     m2len = 1;
    117  1.1  riastrad     if (crypto_aead_chacha20poly1305_decrypt(
    118  1.1  riastrad             m2, &m2len, NULL, NULL,
    119  1.1  riastrad             randombytes_uniform(crypto_aead_chacha20poly1305_ABYTES),
    120  1.1  riastrad             NULL, 0U, nonce, firstkey) != -1) {
    121  1.1  riastrad         printf("crypto_aead_chacha20poly1305_decrypt() worked with a short "
    122  1.1  riastrad                "ciphertext\n");
    123  1.1  riastrad     }
    124  1.1  riastrad     if (m2len != 0) {
    125  1.1  riastrad         printf("Message length should have been set to zero after a failure\n");
    126  1.1  riastrad     }
    127  1.1  riastrad     m2len = 1;
    128  1.1  riastrad     if (crypto_aead_chacha20poly1305_decrypt(m2, &m2len, NULL, c, 0U, NULL, 0U,
    129  1.1  riastrad                                              nonce, firstkey) != -1) {
    130  1.1  riastrad         printf("crypto_aead_chacha20poly1305_decrypt() worked with an empty "
    131  1.1  riastrad                "ciphertext\n");
    132  1.1  riastrad     }
    133  1.1  riastrad     if (m2len != 0) {
    134  1.1  riastrad         printf("Message length should have been set to zero after a failure\n");
    135  1.1  riastrad     }
    136  1.1  riastrad 
    137  1.1  riastrad     memcpy(c, m, MLEN);
    138  1.1  riastrad     crypto_aead_chacha20poly1305_encrypt(c, &found_clen, c, MLEN,
    139  1.1  riastrad                                          NULL, 0U, NULL, nonce, firstkey);
    140  1.1  riastrad     if (found_clen != CLEN) {
    141  1.1  riastrad         printf("found_clen is not properly set (adlen=0)\n");
    142  1.1  riastrad     }
    143  1.1  riastrad     for (i = 0U; i < CLEN; ++i) {
    144  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
    145  1.1  riastrad         if (i % 8 == 7) {
    146  1.1  riastrad             printf("\n");
    147  1.1  riastrad         }
    148  1.1  riastrad     }
    149  1.1  riastrad     printf("\n");
    150  1.1  riastrad 
    151  1.1  riastrad     if (crypto_aead_chacha20poly1305_decrypt(c, &m2len, NULL, c, CLEN,
    152  1.1  riastrad                                              NULL, 0U, nonce, firstkey) != 0) {
    153  1.1  riastrad         printf("crypto_aead_chacha20poly1305_decrypt() failed (adlen=0)\n");
    154  1.1  riastrad     }
    155  1.1  riastrad     if (m2len != MLEN) {
    156  1.1  riastrad         printf("m2len is not properly set (adlen=0)\n");
    157  1.1  riastrad     }
    158  1.1  riastrad     if (memcmp(m, c, MLEN) != 0) {
    159  1.1  riastrad         printf("m != c (adlen=0)\n");
    160  1.1  riastrad     }
    161  1.1  riastrad 
    162  1.1  riastrad     sodium_free(c);
    163  1.1  riastrad     sodium_free(detached_c);
    164  1.1  riastrad     sodium_free(mac);
    165  1.1  riastrad     sodium_free(m2);
    166  1.1  riastrad 
    167  1.1  riastrad     assert(crypto_aead_chacha20poly1305_keybytes() > 0U);
    168  1.1  riastrad     assert(crypto_aead_chacha20poly1305_npubbytes() > 0U);
    169  1.1  riastrad     assert(crypto_aead_chacha20poly1305_nsecbytes() == 0U);
    170  1.1  riastrad     assert(crypto_aead_chacha20poly1305_messagebytes_max() > 0U);
    171  1.1  riastrad     assert(crypto_aead_chacha20poly1305_messagebytes_max() == crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX);
    172  1.1  riastrad     assert(crypto_aead_chacha20poly1305_keybytes() == crypto_aead_chacha20poly1305_KEYBYTES);
    173  1.1  riastrad     assert(crypto_aead_chacha20poly1305_nsecbytes() == crypto_aead_chacha20poly1305_NSECBYTES);
    174  1.1  riastrad     assert(crypto_aead_chacha20poly1305_npubbytes() == crypto_aead_chacha20poly1305_NPUBBYTES);
    175  1.1  riastrad     assert(crypto_aead_chacha20poly1305_abytes() == crypto_aead_chacha20poly1305_ABYTES);
    176  1.1  riastrad 
    177  1.1  riastrad     return 0;
    178  1.1  riastrad }
    179  1.1  riastrad 
    180  1.1  riastrad static int
    181  1.1  riastrad tv_ietf(void)
    182  1.1  riastrad {
    183  1.1  riastrad #undef  MLEN
    184  1.1  riastrad #define MLEN 114U
    185  1.1  riastrad #undef  ADLEN
    186  1.1  riastrad #define ADLEN 12U
    187  1.1  riastrad #undef  CLEN
    188  1.1  riastrad #define CLEN (MLEN + crypto_aead_chacha20poly1305_ietf_ABYTES)
    189  1.1  riastrad     static const unsigned char firstkey[crypto_aead_chacha20poly1305_ietf_KEYBYTES]
    190  1.1  riastrad         = {
    191  1.1  riastrad             0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
    192  1.1  riastrad             0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
    193  1.1  riastrad             0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
    194  1.1  riastrad             0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
    195  1.1  riastrad         };
    196  1.1  riastrad #undef  MESSAGE
    197  1.1  riastrad #define MESSAGE "Ladies and Gentlemen of the class of '99: If I could offer you " \
    198  1.1  riastrad "only one tip for the future, sunscreen would be it."
    199  1.1  riastrad     unsigned char *m = (unsigned char *) sodium_malloc(MLEN);
    200  1.1  riastrad     static const unsigned char nonce[crypto_aead_chacha20poly1305_ietf_NPUBBYTES]
    201  1.1  riastrad         = { 0x07, 0x00, 0x00, 0x00,
    202  1.1  riastrad             0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47 };
    203  1.1  riastrad     static const unsigned char ad[ADLEN]
    204  1.1  riastrad         = { 0x50, 0x51, 0x52, 0x53, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7 };
    205  1.1  riastrad     unsigned char *c = (unsigned char *) sodium_malloc(CLEN);
    206  1.1  riastrad     unsigned char *detached_c = (unsigned char *) sodium_malloc(MLEN);
    207  1.1  riastrad     unsigned char *mac = (unsigned char *) sodium_malloc(crypto_aead_chacha20poly1305_ietf_ABYTES);
    208  1.1  riastrad     unsigned char *m2 = (unsigned char *) sodium_malloc(MLEN);
    209  1.1  riastrad     unsigned long long found_clen;
    210  1.1  riastrad     unsigned long long found_maclen;
    211  1.1  riastrad     unsigned long long m2len;
    212  1.1  riastrad     size_t i;
    213  1.1  riastrad 
    214  1.1  riastrad     assert(sizeof MESSAGE - 1U == MLEN);
    215  1.1  riastrad     memcpy(m, MESSAGE, MLEN);
    216  1.1  riastrad     crypto_aead_chacha20poly1305_ietf_encrypt(c, &found_clen, m, MLEN,
    217  1.1  riastrad                                               ad, ADLEN,
    218  1.1  riastrad                                               NULL, nonce, firstkey);
    219  1.1  riastrad     if (found_clen != MLEN + crypto_aead_chacha20poly1305_ietf_abytes()) {
    220  1.1  riastrad         printf("found_clen is not properly set\n");
    221  1.1  riastrad     }
    222  1.1  riastrad     for (i = 0U; i < CLEN; ++i) {
    223  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
    224  1.1  riastrad         if (i % 8 == 7) {
    225  1.1  riastrad             printf("\n");
    226  1.1  riastrad         }
    227  1.1  riastrad     }
    228  1.1  riastrad     printf("\n");
    229  1.1  riastrad     crypto_aead_chacha20poly1305_ietf_encrypt_detached(detached_c,
    230  1.1  riastrad                                                        mac, &found_maclen,
    231  1.1  riastrad                                                        m, MLEN,
    232  1.1  riastrad                                                        ad, ADLEN,
    233  1.1  riastrad                                                        NULL, nonce, firstkey);
    234  1.1  riastrad     if (found_maclen != crypto_aead_chacha20poly1305_ietf_abytes()) {
    235  1.1  riastrad         printf("found_maclen is not properly set\n");
    236  1.1  riastrad     }
    237  1.1  riastrad     if (memcmp(detached_c, c, MLEN) != 0) {
    238  1.1  riastrad         printf("detached ciphertext is bogus\n");
    239  1.1  riastrad     }
    240  1.1  riastrad 
    241  1.1  riastrad     if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, &m2len, NULL, c, CLEN, ad,
    242  1.1  riastrad                                                   ADLEN, nonce, firstkey) != 0) {
    243  1.1  riastrad         printf("crypto_aead_chacha20poly1305_ietf_decrypt() failed\n");
    244  1.1  riastrad     }
    245  1.1  riastrad     if (m2len != MLEN) {
    246  1.1  riastrad         printf("m2len is not properly set\n");
    247  1.1  riastrad     }
    248  1.1  riastrad     if (memcmp(m, m2, MLEN) != 0) {
    249  1.1  riastrad         printf("m != m2\n");
    250  1.1  riastrad     }
    251  1.1  riastrad     memset(m2, 0, m2len);
    252  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_decrypt_detached(NULL, NULL,
    253  1.1  riastrad                                                               c, MLEN, mac,
    254  1.1  riastrad                                                               ad, ADLEN,
    255  1.1  riastrad                                                               nonce, firstkey) == 0);
    256  1.1  riastrad     if (crypto_aead_chacha20poly1305_ietf_decrypt_detached(m2, NULL,
    257  1.1  riastrad                                                            c, MLEN, mac,
    258  1.1  riastrad                                                            ad, ADLEN,
    259  1.1  riastrad                                                            nonce, firstkey) != 0) {
    260  1.1  riastrad         printf("crypto_aead_chacha20poly1305_ietf_decrypt_detached() failed\n");
    261  1.1  riastrad     }
    262  1.1  riastrad     if (memcmp(m, m2, MLEN) != 0) {
    263  1.1  riastrad         printf("detached m != m2\n");
    264  1.1  riastrad     }
    265  1.1  riastrad 
    266  1.1  riastrad     for (i = 0U; i < CLEN; i++) {
    267  1.1  riastrad         c[i] ^= (i + 1U);
    268  1.1  riastrad         if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, NULL, NULL, c, CLEN,
    269  1.1  riastrad                                                       ad, ADLEN, nonce, firstkey)
    270  1.1  riastrad             == 0 || memcmp(m, m2, MLEN) == 0) {
    271  1.1  riastrad             printf("message can be forged\n");
    272  1.1  riastrad         }
    273  1.1  riastrad         c[i] ^= (i + 1U);
    274  1.1  riastrad     }
    275  1.1  riastrad     crypto_aead_chacha20poly1305_ietf_encrypt(c, &found_clen, m, MLEN,
    276  1.1  riastrad                                               NULL, 0U, NULL, nonce, firstkey);
    277  1.1  riastrad     if (found_clen != CLEN) {
    278  1.1  riastrad         printf("clen is not properly set (adlen=0)\n");
    279  1.1  riastrad     }
    280  1.1  riastrad     for (i = 0U; i < CLEN; ++i) {
    281  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
    282  1.1  riastrad         if (i % 8 == 7) {
    283  1.1  riastrad             printf("\n");
    284  1.1  riastrad         }
    285  1.1  riastrad     }
    286  1.1  riastrad     printf("\n");
    287  1.1  riastrad     if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, &m2len, NULL, c, CLEN,
    288  1.1  riastrad                                                   NULL, 0U, nonce, firstkey) != 0) {
    289  1.1  riastrad         printf("crypto_aead_chacha20poly1305_ietf_decrypt() failed (adlen=0)\n");
    290  1.1  riastrad     }
    291  1.1  riastrad     if (m2len != MLEN) {
    292  1.1  riastrad         printf("m2len is not properly set (adlen=0)\n");
    293  1.1  riastrad     }
    294  1.1  riastrad     if (memcmp(m, m2, MLEN) != 0) {
    295  1.1  riastrad         printf("m != m2 (adlen=0)\n");
    296  1.1  riastrad     }
    297  1.1  riastrad     m2len = 1;
    298  1.1  riastrad     if (crypto_aead_chacha20poly1305_ietf_decrypt(
    299  1.1  riastrad             m2, &m2len, NULL, NULL,
    300  1.1  riastrad             randombytes_uniform(crypto_aead_chacha20poly1305_ietf_ABYTES),
    301  1.1  riastrad             NULL, 0U, nonce, firstkey) != -1) {
    302  1.1  riastrad         printf("crypto_aead_chacha20poly1305_ietf_decrypt() worked with a short "
    303  1.1  riastrad                "ciphertext\n");
    304  1.1  riastrad     }
    305  1.1  riastrad     if (m2len != 0) {
    306  1.1  riastrad         printf("Message length should have been set to zero after a failure\n");
    307  1.1  riastrad     }
    308  1.1  riastrad     m2len = 1;
    309  1.1  riastrad     if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, &m2len, NULL, c, 0U, NULL, 0U,
    310  1.1  riastrad                                                   nonce, firstkey) != -1) {
    311  1.1  riastrad         printf("crypto_aead_chacha20poly1305_ietf_decrypt() worked with an empty "
    312  1.1  riastrad                "ciphertext\n");
    313  1.1  riastrad     }
    314  1.1  riastrad     if (m2len != 0) {
    315  1.1  riastrad         printf("Message length should have been set to zero after a failure\n");
    316  1.1  riastrad     }
    317  1.1  riastrad 
    318  1.1  riastrad     memcpy(c, m, MLEN);
    319  1.1  riastrad     crypto_aead_chacha20poly1305_ietf_encrypt(c, &found_clen, c, MLEN,
    320  1.1  riastrad                                               NULL, 0U, NULL, nonce, firstkey);
    321  1.1  riastrad     if (found_clen != CLEN) {
    322  1.1  riastrad         printf("clen is not properly set (adlen=0)\n");
    323  1.1  riastrad     }
    324  1.1  riastrad     for (i = 0U; i < CLEN; ++i) {
    325  1.1  riastrad         printf(",0x%02x", (unsigned int) c[i]);
    326  1.1  riastrad         if (i % 8 == 7) {
    327  1.1  riastrad             printf("\n");
    328  1.1  riastrad         }
    329  1.1  riastrad     }
    330  1.1  riastrad     printf("\n");
    331  1.1  riastrad 
    332  1.1  riastrad     if (crypto_aead_chacha20poly1305_ietf_decrypt(c, &m2len, NULL, c, CLEN,
    333  1.1  riastrad                                                   NULL, 0U, nonce, firstkey) != 0) {
    334  1.1  riastrad         printf("crypto_aead_chacha20poly1305_ietf_decrypt() failed (adlen=0)\n");
    335  1.1  riastrad     }
    336  1.1  riastrad     if (m2len != MLEN) {
    337  1.1  riastrad         printf("m2len is not properly set (adlen=0)\n");
    338  1.1  riastrad     }
    339  1.1  riastrad     if (memcmp(m, c, MLEN) != 0) {
    340  1.1  riastrad         printf("m != c (adlen=0)\n");
    341  1.1  riastrad     }
    342  1.1  riastrad 
    343  1.1  riastrad     sodium_free(c);
    344  1.1  riastrad     sodium_free(detached_c);
    345  1.1  riastrad     sodium_free(mac);
    346  1.1  riastrad     sodium_free(m2);
    347  1.1  riastrad     sodium_free(m);
    348  1.1  riastrad 
    349  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_keybytes() > 0U);
    350  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_keybytes() == crypto_aead_chacha20poly1305_keybytes());
    351  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_npubbytes() > 0U);
    352  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_npubbytes() > crypto_aead_chacha20poly1305_npubbytes());
    353  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_nsecbytes() == 0U);
    354  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_nsecbytes() == crypto_aead_chacha20poly1305_nsecbytes());
    355  1.1  riastrad     assert(crypto_aead_chacha20poly1305_ietf_messagebytes_max() == crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX);
    356  1.1  riastrad     assert(crypto_aead_chacha20poly1305_IETF_KEYBYTES  == crypto_aead_chacha20poly1305_ietf_KEYBYTES);
    357  1.1  riastrad     assert(crypto_aead_chacha20poly1305_IETF_NSECBYTES == crypto_aead_chacha20poly1305_ietf_NSECBYTES);
    358  1.1  riastrad     assert(crypto_aead_chacha20poly1305_IETF_NPUBBYTES == crypto_aead_chacha20poly1305_ietf_NPUBBYTES);
    359  1.1  riastrad     assert(crypto_aead_chacha20poly1305_IETF_ABYTES    == crypto_aead_chacha20poly1305_ietf_ABYTES);
    360  1.1  riastrad     assert(crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX == crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX);
    361  1.1  riastrad 
    362  1.1  riastrad     return 0;
    363  1.1  riastrad }
    364  1.1  riastrad 
    365  1.1  riastrad int
    366  1.1  riastrad main(void)
    367  1.1  riastrad {
    368  1.1  riastrad     tv();
    369  1.1  riastrad     tv_ietf();
    370  1.1  riastrad 
    371  1.1  riastrad     return 0;
    372  1.1  riastrad }
    373