Tadeusz Struk [off-list ref] wrote:
+ pkey = keyring->payload.data[asym_crypto];
+ if (!pkey) {
+ key_put(keyring);
+ goto out;
+ }
+
+ err = setkey(private, pkey->key, pkey->keylen);
+ key_put(keyring);
Note that you may not assume that there's data there that you can use in this
manner. The key might be a pointer to some hardware device such as a TPM. I
have a TPM asymmetric subtype in progress.
I think this really needs to be driven from a keyctl() because you need to let
the asymmetric subtype decide how it wants to handle this. I would suggest
adding KEYCTL_{ASYM_GETINFO,SIGN,VERIFY,ENCRYPT,DECRYPT} - the problem is how
to pass sufficient arguments, how to decrypt the private key and what metadata
needs to be passed vs what is inline with the data.
David