main.cpp   [plain text]


/*
 * 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;
}