KEYS: Allow the public_key struct to hold a private key [ver #2]
Put a flag in the public_key struct to indicate if the structure is holding a private key. The private key must be held ASN.1 encoded in the format specified in RFC 3447 A.1.2. This is the form required by crypto/rsa.c. The software encryption subtype's verification and query functions then need to select the appropriate crypto function to set the key. Signed-off-by: David Howells <dhowells@redhat.com> Tested-by: Marcel Holtmann <marcel@holtmann.org> Reviewed-by: Marcel Holtmann <marcel@holtmann.org> Reviewed-by: Denis Kenzior <denkenz@gmail.com> Tested-by: Denis Kenzior <denkenz@gmail.com> Signed-off-by: James Morris <james.morris@microsoft.com>
This commit is contained in:
parent
82f94f2447
commit
f7c4e06e06
|
@ -115,7 +115,12 @@ static int software_key_query(const struct kernel_pkey_params *params,
|
|||
if (IS_ERR(tfm))
|
||||
return PTR_ERR(tfm);
|
||||
|
||||
ret = crypto_akcipher_set_pub_key(tfm, pkey->key, pkey->keylen);
|
||||
if (pkey->key_is_private)
|
||||
ret = crypto_akcipher_set_priv_key(tfm,
|
||||
pkey->key, pkey->keylen);
|
||||
else
|
||||
ret = crypto_akcipher_set_pub_key(tfm,
|
||||
pkey->key, pkey->keylen);
|
||||
if (ret < 0)
|
||||
goto error_free_tfm;
|
||||
|
||||
|
@ -170,7 +175,12 @@ int public_key_verify_signature(const struct public_key *pkey,
|
|||
if (!req)
|
||||
goto error_free_tfm;
|
||||
|
||||
ret = crypto_akcipher_set_pub_key(tfm, pkey->key, pkey->keylen);
|
||||
if (pkey->key_is_private)
|
||||
ret = crypto_akcipher_set_priv_key(tfm,
|
||||
pkey->key, pkey->keylen);
|
||||
else
|
||||
ret = crypto_akcipher_set_pub_key(tfm,
|
||||
pkey->key, pkey->keylen);
|
||||
if (ret)
|
||||
goto error_free_req;
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
struct public_key {
|
||||
void *key;
|
||||
u32 keylen;
|
||||
bool key_is_private;
|
||||
const char *id_type;
|
||||
const char *pkey_algo;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue