1 /* SPDX-License-Identifier: GPL-2.0 */
4 * Copyright (C) 2021, Stephan Mueller <smueller@chronox.de>
7 #ifndef _CRYPTO_KDF_SELFTEST_H
8 #define _CRYPTO_KDF_SELFTEST_H
10 #include <crypto/hash.h>
11 #include <linux/uio.h>
19 unsigned char *expected
;
24 kdf_test(const struct kdf_testvec
*test
, const char *name
,
25 int (*crypto_kdf_setkey
)(struct crypto_shash
*kmd
,
26 const u8
*key
, size_t keylen
,
27 const u8
*ikm
, size_t ikmlen
),
28 int (*crypto_kdf_generate
)(struct crypto_shash
*kmd
,
29 const struct kvec
*info
,
30 unsigned int info_nvec
,
31 u8
*dst
, unsigned int dlen
))
33 struct crypto_shash
*kmd
;
35 u8
*buf
= kzalloc(test
->expectedlen
, GFP_KERNEL
);
40 kmd
= crypto_alloc_shash(name
, 0, 0);
42 pr_err("alg: kdf: could not allocate hash handle for %s\n",
48 ret
= crypto_kdf_setkey(kmd
, test
->key
, test
->keylen
,
49 test
->ikm
, test
->ikmlen
);
51 pr_err("alg: kdf: could not set key derivation key\n");
55 ret
= crypto_kdf_generate(kmd
, &test
->info
, 1, buf
, test
->expectedlen
);
57 pr_err("alg: kdf: could not obtain key data\n");
61 ret
= memcmp(test
->expected
, buf
, test
->expectedlen
);
66 crypto_free_shash(kmd
);
71 #endif /* _CRYPTO_KDF_SELFTEST_H */