summaryrefslogtreecommitdiff
path: root/scripts/sign-file.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/sign-file.c')
-rwxr-xr-xscripts/sign-file.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/scripts/sign-file.c b/scripts/sign-file.c
index 5b8a6dda3235..39aaabe89388 100755
--- a/scripts/sign-file.c
+++ b/scripts/sign-file.c
@@ -86,13 +86,14 @@ int main(int argc, char **argv)
char *hash_algo = NULL;
char *private_key_name, *x509_name, *module_name, *dest_name;
bool save_pkcs7 = false, replace_orig;
+ bool sign_only = false;
unsigned char buf[4096];
unsigned long module_size, pkcs7_size;
const EVP_MD *digest_algo;
EVP_PKEY *private_key;
PKCS7 *pkcs7;
X509 *x509;
- BIO *b, *bd, *bm;
+ BIO *b, *bd = NULL, *bm;
int opt, n;
ERR_load_crypto_strings();
@@ -102,6 +103,7 @@ int main(int argc, char **argv)
opt = getopt(argc, argv, "dp");
switch (opt) {
case 'p': save_pkcs7 = true; break;
+ case 'd': sign_only = true; save_pkcs7 = true; break;
case -1: break;
default: format();
}
@@ -148,8 +150,10 @@ int main(int argc, char **argv)
/* Open the destination file now so that we can shovel the module data
* across as we read it.
*/
- bd = BIO_new_file(dest_name, "wb");
- ERR(!bd, "%s", dest_name);
+ if (!sign_only) {
+ bd = BIO_new_file(dest_name, "wb");
+ ERR(!bd, "%s", dest_name);
+ }
/* Digest the module data. */
OpenSSL_add_all_digests();
@@ -180,6 +184,9 @@ int main(int argc, char **argv)
BIO_free(b);
}
+ if (sign_only)
+ return 0;
+
/* Append the marker and the PKCS#7 message to the destination file */
ERR(BIO_reset(bm) < 0, "%s", module_name);
while ((n = BIO_read(bm, buf, sizeof(buf))),