#include <stdlib.h>
#include <stdio.h>
#include <strings.h>
#include <security_cdsa_utils/cuFileIo.h>
#include <security_cdsa_utils/cuPem.h>
#include <security_cdsa_utils/cuEnc64.h>
static void usage (char **argv)
{
printf("Usage:\n");
printf(" %s e infile outfile header_string [q(uiet)] -- to PEM encode\n",
argv[0]);
printf(" %s d infile outfile [q(uiet)] -- to PEM decode\n",
argv[0]);
exit(1);
}
int main(int argc, char **argv)
{
char *outFileName;
unsigned char *inFile = NULL;
unsigned inFileLen;
unsigned char *outFile = NULL;
unsigned outFileLen;
char encFlag = 0;
int arg;
int rtn;
int quiet = 0;
int optarg = 0;
if(argc < 4) {
usage(argv);
}
switch(argv[1][0]) {
case 'e':
encFlag = 1;
if(argc < 5) {
usage(argv);
}
optarg = 5;
break;
case 'd':
encFlag = 0;
if(argc < 4) {
usage(argv);
}
optarg = 4;
break;
default:
usage(argv);
}
for(arg=optarg; arg<argc; arg++) {
switch(argv[arg][0]) {
case 'q':
quiet = 1;
break;
default:
usage(argv);
}
}
if(readFile(argv[2], &inFile, &inFileLen)) {
printf("***Error reading %s; aborting.\n", argv[2]);
exit(1);
}
outFileName = argv[3];
if(encFlag) {
rtn = pemEncode(inFile, inFileLen, &outFile, &outFileLen,
argv[4]);
}
else {
if(isPem(inFile, inFileLen)) {
rtn = pemDecode(inFile, inFileLen, &outFile, &outFileLen);
}
else {
outFile = cuDec64(inFile, inFileLen, &outFileLen);
if(outFile == NULL) {
rtn = 1;
printf("***Error on base64 decode\n");
}
else {
rtn = 0;
}
}
}
if(rtn == 0) {
rtn = writeFile(outFileName, outFile, outFileLen);
if(rtn) {
printf("***Error writing to %s\n", outFileName);
}
else if(!quiet) {
printf("...wrote %u bytes to %s.\n", outFileLen, outFileName);
}
}
else {
printf("***Error processing %s.\n", argv[2]);
}
if(inFile) {
free(inFile);
}
if(outFile) {
free(outFile);
}
return rtn;
}