diff options
Diffstat (limited to 'nss/cmd/ppcertdata/ppcertdata.c')
-rw-r--r-- | nss/cmd/ppcertdata/ppcertdata.c | 139 |
1 files changed, 69 insertions, 70 deletions
diff --git a/nss/cmd/ppcertdata/ppcertdata.c b/nss/cmd/ppcertdata/ppcertdata.c index e1fb287..be12e93 100644 --- a/nss/cmd/ppcertdata/ppcertdata.c +++ b/nss/cmd/ppcertdata/ppcertdata.c @@ -9,92 +9,91 @@ #include "secutil.h" #include "nss.h" -unsigned char binary_line[64 * 1024]; +unsigned char binary_line[64 * 1024]; int -main(int argc, const char ** argv) +main(int argc, const char** argv) { - int skip_count = 0; - int bytes_read; - char line[133]; + int skip_count = 0; + int bytes_read; + char line[133]; if (argc > 1) { - skip_count = atoi(argv[1]); + skip_count = atoi(argv[1]); } if (argc > 2 || skip_count < 0) { printf("Usage: %s [ skip_columns ] \n", argv[0]); - return 1; + return 1; } NSS_NoDB_Init(NULL); - while (fgets(line, 132, stdin) && (bytes_read = strlen(line)) > 0 ) { - int bytes_written; - char * found; - char * in = line + skip_count; - int left = bytes_read - skip_count; - int is_cert; - int is_serial; - int is_name; - int is_hash; - int use_pp = 0; - int out = 0; - SECItem der = {siBuffer, NULL, 0 }; + while (fgets(line, 132, stdin) && (bytes_read = strlen(line)) > 0) { + int bytes_written; + char* found; + char* in = line + skip_count; + int left = bytes_read - skip_count; + int is_cert; + int is_serial; + int is_name; + int is_hash; + int use_pp = 0; + int out = 0; + SECItem der = { siBuffer, NULL, 0 }; - line[bytes_read] = 0; - if (bytes_read <= skip_count) - continue; - fwrite(in, 1, left, stdout); - found = strstr(in, "MULTILINE_OCTAL"); - if (!found) - continue; - fflush(stdout); + line[bytes_read] = 0; + if (bytes_read <= skip_count) + continue; + fwrite(in, 1, left, stdout); + found = strstr(in, "MULTILINE_OCTAL"); + if (!found) + continue; + fflush(stdout); - is_cert = (NULL != strstr(in, "CKA_VALUE")); - is_serial = (NULL != strstr(in, "CKA_SERIAL_NUMBER")); - is_name = (NULL != strstr(in, "CKA_ISSUER")) || - (NULL != strstr(in, "CKA_SUBJECT")); - is_hash = (NULL != strstr(in, "_HASH")); - while (fgets(line, 132, stdin) && - (bytes_read = strlen(line)) > 0 ) { - in = line + skip_count; - left = bytes_read - skip_count; + is_cert = (NULL != strstr(in, "CKA_VALUE")); + is_serial = (NULL != strstr(in, "CKA_SERIAL_NUMBER")); + is_name = (NULL != strstr(in, "CKA_ISSUER")) || + (NULL != strstr(in, "CKA_SUBJECT")); + is_hash = (NULL != strstr(in, "_HASH")); + while (fgets(line, 132, stdin) && + (bytes_read = strlen(line)) > 0) { + in = line + skip_count; + left = bytes_read - skip_count; - if ((left >= 3) && !strncmp(in, "END", 3)) - break; - while (left >= 4) { - if (in[0] == '\\' && isdigit(in[1]) && - isdigit(in[2]) && isdigit(in[3])) { - left -= 4; - binary_line[out++] = ((in[1] - '0') << 6) | - ((in[2] - '0') << 3) | - (in[3] - '0'); - in += 4; - } else - break; - } - } - der.data = binary_line; - der.len = out; - if (is_cert) - SECU_PrintSignedData(stdout, &der, "Certificate", 0, - SECU_PrintCertificate); - else if (is_name) - SECU_PrintDERName(stdout, &der, "Name", 0); - else if (is_serial) { - if (out > 2 && binary_line[0] == 2 && - out == 2 + binary_line[1]) { - der.data += 2; - der.len -= 2; - SECU_PrintInteger(stdout, &der, "DER Serial Number", 0); - } else - SECU_PrintInteger(stdout, &der, "Raw Serial Number", 0); - } else if (is_hash) - SECU_PrintAsHex(stdout, &der, "Hash", 0); - else - SECU_PrintBuf(stdout, "Other", binary_line, out); + if ((left >= 3) && !strncmp(in, "END", 3)) + break; + while (left >= 4) { + if (in[0] == '\\' && isdigit(in[1]) && + isdigit(in[2]) && isdigit(in[3])) { + left -= 4; + binary_line[out++] = ((in[1] - '0') << 6) | + ((in[2] - '0') << 3) | + (in[3] - '0'); + in += 4; + } else + break; + } + } + der.data = binary_line; + der.len = out; + if (is_cert) + SECU_PrintSignedData(stdout, &der, "Certificate", 0, + SECU_PrintCertificate); + else if (is_name) + SECU_PrintDERName(stdout, &der, "Name", 0); + else if (is_serial) { + if (out > 2 && binary_line[0] == 2 && + out == 2 + binary_line[1]) { + der.data += 2; + der.len -= 2; + SECU_PrintInteger(stdout, &der, "DER Serial Number", 0); + } else + SECU_PrintInteger(stdout, &der, "Raw Serial Number", 0); + } else if (is_hash) + SECU_PrintAsHex(stdout, &der, "Hash", 0); + else + SECU_PrintBuf(stdout, "Other", binary_line, out); } NSS_Shutdown(); return 0; } - |