]> git.saurik.com Git - apple/security.git/blob - SecurityTests/clxutils/p12/p12Encode.cpp
Security-57031.30.12.tar.gz
[apple/security.git] / SecurityTests / clxutils / p12 / p12Encode.cpp
1 /*
2 * Decode P12 PFX using P12Coder, reencode to file
3 */
4
5 #include <security_pkcs12/pkcs12Coder.h>
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <Security/cssmtype.h>
9 #include <security_cdsa_utils/cuPrintCert.h>
10 #include <security_cdsa_utils/cuFileIo.h>
11
12 /* decode --> encode */
13 int p12Reencode(
14 const CSSM_DATA &pfx,
15 CSSM_CSP_HANDLE cspHand,
16 CFStringRef pwd, // explicit passphrase, mutually exclusive with...
17 bool verbose,
18 unsigned loops)
19 {
20 int ourRtn;
21
22 for(unsigned loop=0; loop<loops; loop++) {
23 {
24 /* localize scope of coder for malloc test */
25 P12Coder coder;
26 CFDataRef cfd = CFDataCreate(NULL, pfx.Data, pfx.Length);
27 ourRtn = 0;
28
29 printf("...decoding...\n");
30 try {
31 coder.setCsp(cspHand);
32 coder.setMacPassPhrase(pwd);
33 coder.decode(cfd);
34 }
35 catch(...) {
36 printf("***decode error\n");
37 return 1;
38 }
39 CFRelease(cfd);
40
41 /* should just be able to re-encode it */
42 printf("...encoding...\n");
43 CFDataRef encPfx;
44 try {
45 coder.encode(&encPfx);
46 }
47 catch(...) {
48 printf("***encode error\n");
49 return 1;
50 }
51 writeFile("encoded.p12", CFDataGetBytePtr(encPfx),
52 CFDataGetLength(encPfx));
53 printf("...wrote %u bytes to encoded.p12\n",
54 (unsigned)CFDataGetLength(encPfx));
55 CFRelease(encPfx);
56 }
57 if(loops > 1) {
58 fpurge(stdin);
59 printf("CR to continue: ");
60 getchar();
61 }
62 if(ourRtn) {
63 return ourRtn;
64 }
65 }
66 return ourRtn;
67 }