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>
This commit is contained in:
parent
4573b64a31
commit
4ebdb76f7d
@ -382,3 +382,28 @@ int pkcs7_verify(struct pkcs7_message *pkcs7)
|
|||||||
return enopkg;
|
return enopkg;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pkcs7_verify);
|
EXPORT_SYMBOL_GPL(pkcs7_verify);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pkcs7_supply_detached_data - Supply the data needed to verify a PKCS#7 message
|
||||||
|
* @pkcs7: The PKCS#7 message
|
||||||
|
* @data: The data to be verified
|
||||||
|
* @datalen: The amount of data
|
||||||
|
*
|
||||||
|
* Supply the detached data needed to verify a PKCS#7 message. Note that no
|
||||||
|
* attempt to retain/pin the data is made. That is left to the caller. The
|
||||||
|
* data will not be modified by pkcs7_verify() and will not be freed when the
|
||||||
|
* PKCS#7 message is freed.
|
||||||
|
*
|
||||||
|
* Returns -EINVAL if data is already supplied in the message, 0 otherwise.
|
||||||
|
*/
|
||||||
|
int pkcs7_supply_detached_data(struct pkcs7_message *pkcs7,
|
||||||
|
const void *data, size_t datalen)
|
||||||
|
{
|
||||||
|
if (pkcs7->data) {
|
||||||
|
pr_debug("Data already supplied\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
pkcs7->data = data;
|
||||||
|
pkcs7->data_len = datalen;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -34,3 +34,6 @@ extern int pkcs7_validate_trust(struct pkcs7_message *pkcs7,
|
|||||||
* pkcs7_verify.c
|
* pkcs7_verify.c
|
||||||
*/
|
*/
|
||||||
extern int pkcs7_verify(struct pkcs7_message *pkcs7);
|
extern int pkcs7_verify(struct pkcs7_message *pkcs7);
|
||||||
|
|
||||||
|
extern int pkcs7_supply_detached_data(struct pkcs7_message *pkcs7,
|
||||||
|
const void *data, size_t datalen);
|
||||||
|
Loading…
Reference in New Issue
Block a user