| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* | |
| * Kernelspace interface to the pkey device driver | |
| * | |
| * Copyright IBM Corp. 2016 | |
| * | |
| * Author: Harald Freudenberger <freude@de.ibm.com> | |
| * | |
| */ | |
| #ifndef _KAPI_PKEY_H | |
| #define _KAPI_PKEY_H | |
| #include <linux/ioctl.h> | |
| #include <linux/types.h> | |
| #include <uapi/asm/pkey.h> | |
| /* | |
| * Generate (AES) random secure key. | |
| * @param cardnr may be -1 (use default card) | |
| * @param domain may be -1 (use default domain) | |
| * @param keytype one of the PKEY_KEYTYPE values | |
| * @param seckey pointer to buffer receiving the secure key | |
| * @return 0 on success, negative errno value on failure | |
| */ | |
| int pkey_genseckey(__u16 cardnr, __u16 domain, | |
| __u32 keytype, struct pkey_seckey *seckey); | |
| /* | |
| * Generate (AES) secure key with given key value. | |
| * @param cardnr may be -1 (use default card) | |
| * @param domain may be -1 (use default domain) | |
| * @param keytype one of the PKEY_KEYTYPE values | |
| * @param clrkey pointer to buffer with clear key data | |
| * @param seckey pointer to buffer receiving the secure key | |
| * @return 0 on success, negative errno value on failure | |
| */ | |
| int pkey_clr2seckey(__u16 cardnr, __u16 domain, __u32 keytype, | |
| const struct pkey_clrkey *clrkey, | |
| struct pkey_seckey *seckey); | |
| /* | |
| * Derive (AES) proteced key from the (AES) secure key blob. | |
| * @param cardnr may be -1 (use default card) | |
| * @param domain may be -1 (use default domain) | |
| * @param seckey pointer to buffer with the input secure key | |
| * @param protkey pointer to buffer receiving the protected key and | |
| * additional info (type, length) | |
| * @return 0 on success, negative errno value on failure | |
| */ | |
| int pkey_sec2protkey(__u16 cardnr, __u16 domain, | |
| const struct pkey_seckey *seckey, | |
| struct pkey_protkey *protkey); | |
| /* | |
| * Derive (AES) protected key from a given clear key value. | |
| * @param keytype one of the PKEY_KEYTYPE values | |
| * @param clrkey pointer to buffer with clear key data | |
| * @param protkey pointer to buffer receiving the protected key and | |
| * additional info (type, length) | |
| * @return 0 on success, negative errno value on failure | |
| */ | |
| int pkey_clr2protkey(__u32 keytype, | |
| const struct pkey_clrkey *clrkey, | |
| struct pkey_protkey *protkey); | |
| /* | |
| * Search for a matching crypto card based on the Master Key | |
| * Verification Pattern provided inside a secure key. | |
| * @param seckey pointer to buffer with the input secure key | |
| * @param cardnr pointer to cardnr, receives the card number on success | |
| * @param domain pointer to domain, receives the domain number on success | |
| * @param verify if set, always verify by fetching verification pattern | |
| * from card | |
| * @return 0 on success, negative errno value on failure. If no card could be | |
| * found, -ENODEV is returned. | |
| */ | |
| int pkey_findcard(const struct pkey_seckey *seckey, | |
| __u16 *cardnr, __u16 *domain, int verify); | |
| /* | |
| * Find card and transform secure key to protected key. | |
| * @param seckey pointer to buffer with the input secure key | |
| * @param protkey pointer to buffer receiving the protected key and | |
| * additional info (type, length) | |
| * @return 0 on success, negative errno value on failure | |
| */ | |
| int pkey_skey2pkey(const struct pkey_seckey *seckey, | |
| struct pkey_protkey *protkey); | |
| /* | |
| * Verify the given secure key for being able to be useable with | |
| * the pkey module. Check for correct key type and check for having at | |
| * least one crypto card being able to handle this key (master key | |
| * or old master key verification pattern matches). | |
| * Return some info about the key: keysize in bits, keytype (currently | |
| * only AES), flag if key is wrapped with an old MKVP. | |
| * @param seckey pointer to buffer with the input secure key | |
| * @param pcardnr pointer to cardnr, receives the card number on success | |
| * @param pdomain pointer to domain, receives the domain number on success | |
| * @param pkeysize pointer to keysize, receives the bitsize of the key | |
| * @param pattributes pointer to attributes, receives additional info | |
| * PKEY_VERIFY_ATTR_AES if the key is an AES key | |
| * PKEY_VERIFY_ATTR_OLD_MKVP if key has old mkvp stored in | |
| * @return 0 on success, negative errno value on failure. If no card could | |
| * be found which is able to handle this key, -ENODEV is returned. | |
| */ | |
| int pkey_verifykey(const struct pkey_seckey *seckey, | |
| u16 *pcardnr, u16 *pdomain, | |
| u16 *pkeysize, u32 *pattributes); | |
| #endif /* _KAPI_PKEY_H */ |