certInCrl.cpp   [plain text]


/*
 * certInCrl.c - simple "see if cert is in CRL"
 */
#include <security_cdsa_utils/cuFileIo.h>
#include <utilLib/common.h>
#include <clAppUtils/clutils.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Security/cssm.h>

static void usage(char **argv)
{
	printf("Usage: %s certFile crlFile [l=loops]\n", argv[0]);
	exit(1);
}

int main(int argc, char **argv)
{
	CSSM_DATA cert;
	CSSM_DATA crl;
	int rtn;
	CSSM_CL_HANDLE clHand;
	CSSM_RETURN crtn;
	int loops = 1;
	int loop;
	int arg;
	
	if(argc < 3) {
		usage(argv);
	}
	for(arg=3; arg<argc; arg++) {
		switch(argv[arg][0]) {
			case 'l':
				loops = atoi(&argv[arg][2]);
				break;
			default:
				usage(argv);
		}
	}
	unsigned len;
	rtn = readFile(argv[1], &cert.Data, &len);
	if(rtn) {
		printf("Error reading %s; %s\n", argv[1], strerror(rtn));
		exit(1);
	}
	cert.Length = len;
	rtn = readFile(argv[2], &crl.Data, &len);
	if(rtn) {
		printf("Error reading %s; %s\n", argv[1], strerror(rtn));
		exit(1);
	}
	crl.Length = len;

	clHand = clStartup();
	if(clHand == CSSM_INVALID_HANDLE) {
		return 1;
	}
	CSSM_BOOL found;
	for(loop=0; loop<loops; loop++) {
		crtn = CSSM_CL_IsCertInCrl(
			clHand,
			&cert,
			&crl,
			&found);
		if(crtn) {
			printError("CSSM_CL_IsCertInCrl", crtn);
			goto abort;
		}
		if(found) {
			printf("CertFound TRUE\n");
		}
		else {
			printf("CertFound FALSE\n");
		}
		if(loops != 1) {
			fpurge(stdin);
			printf("CR to continue, q to quit: ");
			char c = getchar();
			if(c == 'q') {
				break;
			}
		}
	}
abort:
	free(cert.Data);
	free(crl.Data);
	return 0;
}