1/* 2 * certInCrl.c - simple "see if cert is in CRL" 3 */ 4#include <security_cdsa_utils/cuFileIo.h> 5#include <utilLib/common.h> 6#include <clAppUtils/clutils.h> 7#include <stdlib.h> 8#include <stdio.h> 9#include <string.h> 10#include <Security/cssm.h> 11 12static void usage(char **argv) 13{ 14 printf("Usage: %s certFile crlFile [l=loops]\n", argv[0]); 15 exit(1); 16} 17 18int main(int argc, char **argv) 19{ 20 CSSM_DATA cert; 21 CSSM_DATA crl; 22 int rtn; 23 CSSM_CL_HANDLE clHand; 24 CSSM_RETURN crtn; 25 int loops = 1; 26 int loop; 27 int arg; 28 29 if(argc < 3) { 30 usage(argv); 31 } 32 for(arg=3; arg<argc; arg++) { 33 switch(argv[arg][0]) { 34 case 'l': 35 loops = atoi(&argv[arg][2]); 36 break; 37 default: 38 usage(argv); 39 } 40 } 41 unsigned len; 42 rtn = readFile(argv[1], &cert.Data, &len); 43 if(rtn) { 44 printf("Error reading %s; %s\n", argv[1], strerror(rtn)); 45 exit(1); 46 } 47 cert.Length = len; 48 rtn = readFile(argv[2], &crl.Data, &len); 49 if(rtn) { 50 printf("Error reading %s; %s\n", argv[1], strerror(rtn)); 51 exit(1); 52 } 53 crl.Length = len; 54 55 clHand = clStartup(); 56 if(clHand == CSSM_INVALID_HANDLE) { 57 return 1; 58 } 59 CSSM_BOOL found; 60 for(loop=0; loop<loops; loop++) { 61 crtn = CSSM_CL_IsCertInCrl( 62 clHand, 63 &cert, 64 &crl, 65 &found); 66 if(crtn) { 67 printError("CSSM_CL_IsCertInCrl", crtn); 68 goto abort; 69 } 70 if(found) { 71 printf("CertFound TRUE\n"); 72 } 73 else { 74 printf("CertFound FALSE\n"); 75 } 76 if(loops != 1) { 77 fpurge(stdin); 78 printf("CR to continue, q to quit: "); 79 char c = getchar(); 80 if(c == 'q') { 81 break; 82 } 83 } 84 } 85abort: 86 free(cert.Data); 87 free(crl.Data); 88 return 0; 89} 90 91