1 /*
2  * Copyright (C) 2018-2022 Intel Corporation.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <rtl.h>
8 #include "mbedtls/hkdf.h"
9 #include "mbedtls/md.h"
10 
hkdf_sha256(uint8_t * out_key,size_t out_len,const uint8_t * secret,size_t secret_len,const uint8_t * salt,size_t salt_len,const uint8_t * info,size_t info_len)11 int32_t hkdf_sha256(uint8_t *out_key, size_t out_len,
12 		const uint8_t *secret, size_t secret_len,
13 		const uint8_t *salt, size_t salt_len,
14 		const uint8_t *info, size_t info_len)
15 {
16 	int32_t ret = 0;
17 	const mbedtls_md_info_t *md;
18 
19 	/* salt and info can be NULL, others can't */
20 	if ((out_key != NULL) && (secret != NULL)) {
21 		md = mbedtls_md_info_from_type(MBEDTLS_MD_SHA256);
22 		if (md != NULL) {
23 			if (mbedtls_hkdf(md, salt, salt_len, secret, secret_len,
24 				info, info_len, out_key, out_len) == 0) {
25 				ret = 1;
26 			}
27 		}
28 	}
29 
30 	return ret;
31 }
32 
hmac_sha256(uint8_t * out_key,const uint8_t * secret,size_t secret_len,const uint8_t * salt,size_t salt_len)33 int32_t hmac_sha256(uint8_t *out_key,
34 		const uint8_t *secret, size_t secret_len,
35 		const uint8_t *salt, size_t salt_len)
36 {
37 	int32_t ret = 0;
38 	const mbedtls_md_info_t *md;
39 
40 	if ((out_key != NULL) && (secret != NULL) && (salt != NULL)) {
41 		md = mbedtls_md_info_from_type(MBEDTLS_MD_SHA256);
42 		if (md != NULL) {
43 			if (mbedtls_md_hmac(md, secret, secret_len, salt, salt_len, out_key) == 0) {
44 				ret = 1;
45 			}
46 		}
47 	}
48 
49 	return ret;
50 }
51