diff options
author | David Howells <dhowells@redhat.com> | 2015-07-20 16:16:26 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2015-08-07 11:26:13 -0400 |
commit | 4ebdb76f7da662346267384440492bb9d87c2aa3 (patch) | |
tree | 53b863a630359237fc6dfdfc051a2aebbac5f7d1 /crypto/asymmetric_keys | |
parent | 4573b64a31cd8cb4cfeb1d1b95536cfe71980cf4 (diff) |
PKCS#7: Allow detached data to be supplied for signature checking purposes
It is possible for a PKCS#7 message to have detached data. However, to verify
the signatures on a PKCS#7 message, we have to be able to digest the data.
Provide a function to supply that data. An error is given if the PKCS#7
message included embedded data.
This is used in a subsequent patch to supply the data to module signing where
the signature is in the form of a PKCS#7 message with detached data, whereby
the detached data is the module content that is signed.
Signed-off-by: David Howells <dhowells@redhat.com>
Tested-by: Vivek Goyal <vgoyal@redhat.com>
Diffstat (limited to 'crypto/asymmetric_keys')
-rw-r--r-- | crypto/asymmetric_keys/pkcs7_verify.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/crypto/asymmetric_keys/pkcs7_verify.c b/crypto/asymmetric_keys/pkcs7_verify.c index 42bfc9de0d79..404f89a0f852 100644 --- a/crypto/asymmetric_keys/pkcs7_verify.c +++ b/crypto/asymmetric_keys/pkcs7_verify.c | |||
@@ -382,3 +382,28 @@ int pkcs7_verify(struct pkcs7_message *pkcs7) | |||
382 | return enopkg; | 382 | return enopkg; |
383 | } | 383 | } |
384 | EXPORT_SYMBOL_GPL(pkcs7_verify); | 384 | EXPORT_SYMBOL_GPL(pkcs7_verify); |
385 | |||
386 | /** | ||
387 | * pkcs7_supply_detached_data - Supply the data needed to verify a PKCS#7 message | ||
388 | * @pkcs7: The PKCS#7 message | ||
389 | * @data: The data to be verified | ||
390 | * @datalen: The amount of data | ||
391 | * | ||
392 | * Supply the detached data needed to verify a PKCS#7 message. Note that no | ||
393 | * attempt to retain/pin the data is made. That is left to the caller. The | ||
394 | * data will not be modified by pkcs7_verify() and will not be freed when the | ||
395 | * PKCS#7 message is freed. | ||
396 | * | ||
397 | * Returns -EINVAL if data is already supplied in the message, 0 otherwise. | ||
398 | */ | ||
399 | int pkcs7_supply_detached_data(struct pkcs7_message *pkcs7, | ||
400 | const void *data, size_t datalen) | ||
401 | { | ||
402 | if (pkcs7->data) { | ||
403 | pr_debug("Data already supplied\n"); | ||
404 | return -EINVAL; | ||
405 | } | ||
406 | pkcs7->data = data; | ||
407 | pkcs7->data_len = datalen; | ||
408 | return 0; | ||
409 | } | ||