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