p12dcx->tokenCAs = SECPKCS12TargetTokenNoCAs;
SEC_PKCS12DecoderStart(SECItem *pwitem, PK11SlotInfo *slot, void *wincx,		       digestOpenFn dOpen, digestCloseFn dClose, 		       digestIOFn dRead, digestIOFn dWrite, void *dArg){    SEC_PKCS12DecoderContext *p12dcx;    PRArenaPool *arena;    arena = PORT_NewArena(2048); /* different size? */    if(!arena) {	PORT_SetError(SEC_ERROR_NO_MEMORY);	return NULL;    }    /* allocate the decoder context and set the state variables */    p12dcx = (SEC_PKCS12DecoderContext*)PORT_ArenaZAlloc(arena, sizeof(SEC_PKCS12DecoderContext));    if(!p12dcx) {	PORT_SetError(SEC_ERROR_NO_MEMORY);	goto loser;    }    if (!dOpen && !dClose && !dRead && !dWrite && !dArg) {        /* use default implementations */        dOpen = p12u_DigestOpen;        dClose = p12u_DigestClose;        dRead = p12u_DigestRead;        dWrite = p12u_DigestWrite;        dArg = (void*)p12dcx;    }    p12dcx->arena = arena;    p12dcx->pwitem = pwitem;    p12dcx->slot = (slot ? PK11_ReferenceSlot(slot) 						: PK11_GetInternalKeySlot());    p12dcx->wincx = wincx;#ifdef IS_LITTLE_ENDIAN    p12dcx->swapUnicodeBytes = PR_TRUE;#else    p12dcx->swapUnicodeBytes = PR_FALSE;#endif    p12dcx->errorValue = 0;    p12dcx->error = PR_FALSE;    /* start the decoding of the PFX and set the notify proc     * for the PFX item.     */    p12dcx->pfxDcx = SEC_ASN1DecoderStart(p12dcx->arena, &p12dcx->pfx,    					  sec_PKCS12PFXItemTemplate);    if(!p12dcx->pfxDcx) {	PORT_SetError(SEC_ERROR_NO_MEMORY); 	PK11_FreeSlot(p12dcx->slot);	goto loser;    }    SEC_ASN1DecoderSetNotifyProc(p12dcx->pfxDcx, 				 sec_pkcs12_decoder_pfx_notify_proc,    				 p12dcx);         /* set up digest functions */    p12dcx->dOpen = dOpen;    p12dcx->dWrite = dWrite;    p12dcx->dClose = dClose;    p12dcx->dRead = dRead;    p12dcx->dArg = dArg;    return p12dcx;loser:    PORT_FreeArena(arena, PR_TRUE);    return NULL;}