Home | History | Annotate | Line # | Download | only in default
      1  1.1  riastrad 
      2  1.1  riastrad #define TEST_NAME "kdf"
      3  1.1  riastrad #include "cmptest.h"
      4  1.1  riastrad 
      5  1.1  riastrad static void
      6  1.1  riastrad tv_kdf(void)
      7  1.1  riastrad {
      8  1.1  riastrad     unsigned char *master_key;
      9  1.1  riastrad     unsigned char *subkey;
     10  1.1  riastrad     char          *context;
     11  1.1  riastrad     char           hex[crypto_kdf_BYTES_MAX * 2 + 1];
     12  1.1  riastrad     uint64_t       i;
     13  1.1  riastrad     int            ret;
     14  1.1  riastrad 
     15  1.1  riastrad     context = (char *) sodium_malloc(crypto_kdf_CONTEXTBYTES);
     16  1.1  riastrad     memcpy(context, "KDF test", strlen("KDF test"));
     17  1.1  riastrad     master_key = (unsigned char *) sodium_malloc(crypto_kdf_KEYBYTES);
     18  1.1  riastrad     for (i = 0; i < crypto_kdf_KEYBYTES; i++) {
     19  1.1  riastrad         master_key[i] = i;
     20  1.1  riastrad     }
     21  1.1  riastrad     subkey = (unsigned char *) sodium_malloc(crypto_kdf_BYTES_MAX);
     22  1.1  riastrad     for (i = 0; i < 10; i++) {
     23  1.1  riastrad         ret = crypto_kdf_derive_from_key(subkey, crypto_kdf_BYTES_MAX,
     24  1.1  riastrad                                          i, context, master_key);
     25  1.1  riastrad         assert(ret == 0);
     26  1.1  riastrad         sodium_bin2hex(hex, sizeof hex, subkey, crypto_kdf_BYTES_MAX);
     27  1.1  riastrad         printf("%s\n", hex);
     28  1.1  riastrad     }
     29  1.1  riastrad     sodium_free(subkey);
     30  1.1  riastrad 
     31  1.1  riastrad     for (i = 0; i < crypto_kdf_BYTES_MAX + 2; i++) {
     32  1.1  riastrad         subkey = (unsigned char *) sodium_malloc(crypto_kdf_BYTES_MAX);
     33  1.1  riastrad         if (crypto_kdf_derive_from_key(subkey, (size_t) i,
     34  1.1  riastrad                                        i, context, master_key) == 0) {
     35  1.1  riastrad             sodium_bin2hex(hex, sizeof hex, subkey, (size_t) i);
     36  1.1  riastrad             printf("%s\n", hex);
     37  1.1  riastrad         } else {
     38  1.1  riastrad             printf("Failure -- probably expected for output length=%u\n",
     39  1.1  riastrad                    (unsigned int) i);
     40  1.1  riastrad         }
     41  1.1  riastrad         sodium_free(subkey);
     42  1.1  riastrad     }
     43  1.1  riastrad 
     44  1.1  riastrad     assert(strcmp(crypto_kdf_primitive(), crypto_kdf_PRIMITIVE) == 0);
     45  1.1  riastrad     assert(crypto_kdf_BYTES_MAX > 0);
     46  1.1  riastrad     assert(crypto_kdf_BYTES_MIN <= crypto_kdf_BYTES_MAX);
     47  1.1  riastrad     assert(crypto_kdf_bytes_min() == crypto_kdf_BYTES_MIN);
     48  1.1  riastrad     assert(crypto_kdf_bytes_max() == crypto_kdf_BYTES_MAX);
     49  1.1  riastrad     assert(crypto_kdf_CONTEXTBYTES > 0);
     50  1.1  riastrad     assert(crypto_kdf_contextbytes() == crypto_kdf_CONTEXTBYTES);
     51  1.1  riastrad     assert(crypto_kdf_KEYBYTES >= 16);
     52  1.1  riastrad     assert(crypto_kdf_keybytes() == crypto_kdf_KEYBYTES);
     53  1.1  riastrad     assert(crypto_kdf_bytes_min() == crypto_kdf_blake2b_bytes_min());
     54  1.1  riastrad     assert(crypto_kdf_bytes_max() == crypto_kdf_blake2b_bytes_max());
     55  1.1  riastrad     assert(crypto_kdf_contextbytes() == crypto_kdf_blake2b_contextbytes());
     56  1.1  riastrad     assert(crypto_kdf_keybytes() == crypto_kdf_blake2b_keybytes());
     57  1.1  riastrad 
     58  1.1  riastrad     printf("tv_kdf: ok\n");
     59  1.1  riastrad }
     60  1.1  riastrad 
     61  1.1  riastrad int
     62  1.1  riastrad main(void)
     63  1.1  riastrad {
     64  1.1  riastrad     tv_kdf();
     65  1.1  riastrad 
     66  1.1  riastrad     return 0;
     67  1.1  riastrad }
     68