1b886d83cSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2982e617aSMimi Zohar /*
3982e617aSMimi Zohar  * Copyright (C) 2010 IBM Corporation
4982e617aSMimi Zohar  * Copyright (C) 2010 Politecnico di Torino, Italy
5*c9fecf50SAlexander A. Klimov  *                    TORSEC group -- https://security.polito.it
6982e617aSMimi Zohar  *
7982e617aSMimi Zohar  * Authors:
8982e617aSMimi Zohar  * Mimi Zohar <zohar@us.ibm.com>
9982e617aSMimi Zohar  * Roberto Sassu <roberto.sassu@polito.it>
10982e617aSMimi Zohar  *
115395d312SKees Cook  * See Documentation/security/keys/trusted-encrypted.rst
12982e617aSMimi Zohar  */
13982e617aSMimi Zohar 
14982e617aSMimi Zohar #include <linux/uaccess.h>
15cc100551SStephen Rothwell #include <linux/err.h>
16982e617aSMimi Zohar #include <keys/trusted-type.h>
17ee0b31a2SMimi Zohar #include <keys/encrypted-type.h>
18ee0b31a2SMimi Zohar #include "encrypted.h"
19982e617aSMimi Zohar 
20982e617aSMimi Zohar /*
21982e617aSMimi Zohar  * request_trusted_key - request the trusted key
22982e617aSMimi Zohar  *
23982e617aSMimi Zohar  * Trusted keys are sealed to PCRs and other metadata. Although userspace
24982e617aSMimi Zohar  * manages both trusted/encrypted key-types, like the encrypted key type
25982e617aSMimi Zohar  * data, trusted key type data is not visible decrypted from userspace.
26982e617aSMimi Zohar  */
request_trusted_key(const char * trusted_desc,const u8 ** master_key,size_t * master_keylen)27982e617aSMimi Zohar struct key *request_trusted_key(const char *trusted_desc,
28146aa8b1SDavid Howells 				const u8 **master_key, size_t *master_keylen)
29982e617aSMimi Zohar {
30982e617aSMimi Zohar 	struct trusted_key_payload *tpayload;
31982e617aSMimi Zohar 	struct key *tkey;
32982e617aSMimi Zohar 
33028db3e2SLinus Torvalds 	tkey = request_key(&key_type_trusted, trusted_desc, NULL);
34982e617aSMimi Zohar 	if (IS_ERR(tkey))
35982e617aSMimi Zohar 		goto error;
36982e617aSMimi Zohar 
37982e617aSMimi Zohar 	down_read(&tkey->sem);
38146aa8b1SDavid Howells 	tpayload = tkey->payload.data[0];
39982e617aSMimi Zohar 	*master_key = tpayload->key;
40982e617aSMimi Zohar 	*master_keylen = tpayload->key_len;
41982e617aSMimi Zohar error:
42982e617aSMimi Zohar 	return tkey;
43982e617aSMimi Zohar }
44