Index: utility/dumpRSAPublicKey.c |
diff --git a/utility/dumpRSAPublicKey.c b/utility/dumpRSAPublicKey.c |
index 837303cbe717b2c2624d33708cc0574436dbc28e..da8597afcf157d6e26098fb65b1716b77e6aeefe 100644 |
--- a/utility/dumpRSAPublicKey.c |
+++ b/utility/dumpRSAPublicKey.c |
@@ -136,40 +136,52 @@ failure: |
} |
int main(int argc, char* argv[]) { |
+ int cert_mode = 0; |
FILE* fp; |
X509* cert = NULL; |
RSA* pubkey = NULL; |
EVP_PKEY* key; |
- if (argc != 2) { |
- fprintf(stderr, "Usage: %s <certfile>\n", argv[0]); |
+ if (argc != 3 || (strcmp(argv[1], "-cert") && strcmp(argv[1], "-pub"))) { |
+ fprintf(stderr, "Usage: %s <-cert | -pub> <file>\n", argv[0]); |
return -1; |
} |
- fp = fopen(argv[1], "r"); |
+ if (!strcmp(argv[1], "-cert")) |
+ cert_mode = 1; |
+ |
+ fp = fopen(argv[2], "r"); |
if (!fp) { |
- fprintf(stderr, "Couldn't open certificate file!\n"); |
+ fprintf(stderr, "Couldn't open file %s!\n", argv[2]); |
return -1; |
} |
- /* Read the certificate */ |
- if (!PEM_read_X509(fp, &cert, NULL, NULL)) { |
- fprintf(stderr, "Couldn't read certificate.\n"); |
- goto fail; |
- } |
- |
- /* Get the public key from the certificate. */ |
- key = X509_get_pubkey(cert); |
- |
- /* Convert to a RSA_style key. */ |
- if (!(pubkey = EVP_PKEY_get1_RSA(key))) { |
- fprintf(stderr, "Couldn't convert to a RSA style key.\n"); |
- goto fail; |
+ if (cert_mode) { |
+ /* Read the certificate */ |
+ if (!PEM_read_X509(fp, &cert, NULL, NULL)) { |
+ fprintf(stderr, "Couldn't read certificate.\n"); |
+ goto fail; |
+ } |
+ |
+ /* Get the public key from the certificate. */ |
+ key = X509_get_pubkey(cert); |
+ |
+ /* Convert to a RSA_style key. */ |
+ if (!(pubkey = EVP_PKEY_get1_RSA(key))) { |
+ fprintf(stderr, "Couldn't convert to a RSA style key.\n"); |
+ goto fail; |
+ } |
+ } else { |
+ /* Read the pubkey in .PEM format. */ |
+ if (!(pubkey = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL))) { |
+ fprintf(stderr, "Couldn't read public key file.\n"); |
+ goto fail; |
+ } |
} |
if (check(pubkey)) { |
- output (pubkey); |
+ output(pubkey); |
} |
fail: |