/* * Parse an encoded NSS_P12_AuthenticatedSafe */ static int authSafeParse( const CSSM_DATA authSafeBlob, P12ParseInfo &pinfo, unsigned depth) // print indent depth { NSS_P12_AuthenticatedSafe authSafe; memset(&authSafe, 0, sizeof(authSafe)); if(pinfo.mCoder.decodeItem(authSafeBlob, NSS_P12_AuthenticatedSafeTemplate, &authSafe)) { printf("***Error decoding authSafe\n"); return 1; } unsigned numInfos = nssArraySize((const void **)authSafe.info); doIndent(depth); printf("authSafe numInfos %u\n", numInfos); int rtn = 0; for(unsigned dex=0; dex<numInfos; dex++) { NSS_P7_DecodedContentInfo *info = authSafe.info[dex]; doIndent(depth); printf("AuthSafe.info[%u] {\n", dex); rtn = authSafeElementParse(info, pinfo, depth+3); if(rtn) { break; } doIndent(depth); printf("}\n"); } return rtn; }
/* * Parse an encoded NSS_P12_AuthenticatedSafe */ static int authSafeParse(pkcs12_context * context, const SecAsn1Item *authSafeBlob) { p12DecodeLog("authSafeParse"); NSS_P12_AuthenticatedSafe authSafe; memset(&authSafe, 0, sizeof(authSafe)); require_noerr(decode_item(context, authSafeBlob, NSS_P12_AuthenticatedSafeTemplate, &authSafe), out); unsigned numInfos = nssArraySize((const void **)authSafe.info); unsigned int dex; for (dex=0; dex<numInfos; dex++) { NSS_P7_DecodedContentInfo *info = authSafe.info[dex]; require_noerr_quiet(authSafeElementParse(context, info), out); } return 0; out: return -1; }
/* * Parse an encoded NSS_P12_AuthenticatedSafe */ void P12Coder::authSafeParse( const CSSM_DATA &authSafeBlob, SecNssCoder &localCdr) { p12DecodeLog("authSafeParse"); NSS_P12_AuthenticatedSafe authSafe; memset(&authSafe, 0, sizeof(authSafe)); if(localCdr.decodeItem(authSafeBlob, NSS_P12_AuthenticatedSafeTemplate, &authSafe)) { p12ErrorLog("Error decoding authSafe\n"); P12_THROW_DECODE; } unsigned numInfos = nssArraySize((const void **)authSafe.info); for(unsigned dex=0; dex<numInfos; dex++) { NSS_P7_DecodedContentInfo *info = authSafe.info[dex]; authSafeElementParse(info, localCdr); } }