kdf.c revision 1.1 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