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