+++ /dev/null
-/*
- * Decode P12 PFX using P12Coder, reencode to file
- */
-
-#include <security_pkcs12/pkcs12Coder.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <Security/cssmtype.h>
-#include <security_cdsa_utils/cuPrintCert.h>
-#include <security_cdsa_utils/cuFileIo.h>
-
-/* decode --> encode */
-int p12Reencode(
- const CSSM_DATA &pfx,
- CSSM_CSP_HANDLE cspHand,
- CFStringRef pwd, // explicit passphrase, mutually exclusive with...
- bool verbose,
- unsigned loops)
-{
- int ourRtn;
-
- for(unsigned loop=0; loop<loops; loop++) {
- {
- /* localize scope of coder for malloc test */
- P12Coder coder;
- CFDataRef cfd = CFDataCreate(NULL, pfx.Data, pfx.Length);
- ourRtn = 0;
-
- printf("...decoding...\n");
- try {
- coder.setCsp(cspHand);
- coder.setMacPassPhrase(pwd);
- coder.decode(cfd);
- }
- catch(...) {
- printf("***decode error\n");
- return 1;
- }
- CFRelease(cfd);
-
- /* should just be able to re-encode it */
- printf("...encoding...\n");
- CFDataRef encPfx;
- try {
- coder.encode(&encPfx);
- }
- catch(...) {
- printf("***encode error\n");
- return 1;
- }
- writeFile("encoded.p12", CFDataGetBytePtr(encPfx),
- CFDataGetLength(encPfx));
- printf("...wrote %u bytes to encoded.p12\n",
- (unsigned)CFDataGetLength(encPfx));
- CFRelease(encPfx);
- }
- if(loops > 1) {
- fpurge(stdin);
- printf("CR to continue: ");
- getchar();
- }
- if(ourRtn) {
- return ourRtn;
- }
- }
- return ourRtn;
-}