--- /dev/null
+/*
+ * standalone pkcs12 parser.
+ */
+#include <security_cdsa_utils/cuFileIo.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include "p12Parse.h"
+#include <security_cdsa_utils/cuCdsaUtils.h>
+
+static void usage(char **argv)
+{
+ printf("Usage: %s infile password [v(erbose)\n", argv[0]);
+ exit(1);
+}
+
+int main(int argc, char **argv)
+{
+ char *inFile;
+ CFStringRef pwd = NULL;
+ bool verbose = false;
+
+ if(argc < 3) {
+ usage(argv);
+ }
+ for(int arg=3; arg<argc; arg++) {
+ char *argp = argv[arg];
+ switch(argp[0]) {
+ case 'v':
+ verbose = true;
+ break;
+ default:
+ usage(argv);
+ }
+ }
+
+ inFile = argv[1];
+ CSSM_DATA rawBlob;
+ unsigned len;
+ if(readFile(inFile, &rawBlob.Data, &len)) {
+ printf("***Error reading %s. Aborting.\n", inFile);
+ exit(1);
+ }
+ rawBlob.Length = len;
+ pwd = CFStringCreateWithCString(NULL, argv[2], kCFStringEncodingASCII);
+
+ CSSM_CSP_HANDLE cspHand = cuCspStartup(CSSM_TRUE);
+ int rtn = p12ParseTop(rawBlob, cspHand, pwd, verbose);
+ return rtn;
+}