SECU_PrintUTCTime(out, signing_time, "Signing time", 0);
SECU_PrintTimeChoice(out, signing_time, "Signing time", 0);
DecodeAndPrintFile(FILE *out, PRFileDesc *in, char *progName){    SECItem derdata;    SEC_PKCS7ContentInfo *cinfo = NULL;    SEC_PKCS7DecoderContext *dcx;    if (SECU_ReadDERFromFile(&derdata, in, PR_FALSE)) {        SECU_PrintError(progName, "error converting der");	return -1;    }    fprintf(out,	    "Content printed between bars (newline added before second bar):");    fprintf(out, "\n---------------------------------------------\n");    saw_content = PR_FALSE;    dcx = SEC_PKCS7DecoderStart(PrintBytes, out, NULL, NULL,				NULL, NULL, decryption_allowed);    if (dcx != NULL) {#if 0	/* Test that decoder works when data is really streaming in. */	{	    unsigned long i;	    for (i = 0; i < derdata.len; i++)		SEC_PKCS7DecoderUpdate(dcx, derdata.data + i, 1);	}#else	SEC_PKCS7DecoderUpdate(dcx, (char *)derdata.data, derdata.len);#endif	cinfo = SEC_PKCS7DecoderFinish(dcx);    }    fprintf(out, "\n---------------------------------------------\n");    if (cinfo == NULL)	return -1;    fprintf(out, "Content was%s encrypted.\n",	    SEC_PKCS7ContentIsEncrypted(cinfo) ? "" : " not");    if (SEC_PKCS7ContentIsSigned(cinfo)) {	char *signer_cname, *signer_ename;	SECItem *signing_time;	if (saw_content) {	    fprintf(out, "Signature is ");	    PORT_SetError(0);	    if (SEC_PKCS7VerifySignature(cinfo, certUsageEmailSigner, PR_FALSE))		fprintf(out, "valid.\n");	    else		fprintf(out, "invalid (Reason: %s).\n",			SECU_Strerror(PORT_GetError()));	} else {	    fprintf(out,		    "Content is detached; signature cannot be verified.\n");	}	signer_cname = SEC_PKCS7GetSignerCommonName(cinfo);	if (signer_cname != NULL) {	    fprintf(out, "The signer's common name is %s\n", signer_cname);	    PORT_Free(signer_cname);	} else {	    fprintf(out, "No signer common name.\n");	}	signer_ename = SEC_PKCS7GetSignerEmailAddress(cinfo);	if (signer_ename != NULL) {	    fprintf(out, "The signer's email address is %s\n", signer_ename);	    PORT_Free(signer_ename);	} else {	    fprintf(out, "No signer email address.\n");	}	signing_time = SEC_PKCS7GetSigningTime(cinfo);	if (signing_time != NULL) {	    SECU_PrintUTCTime(out, signing_time, "Signing time", 0);	} else {	    fprintf(out, "No signing time included.\n");	}    } else {	fprintf(out, "Content was not signed.\n");    }    fprintf(out, "There were%s certs or crls included.\n",	    SEC_PKCS7ContainsCertsOrCrls(cinfo) ? "" : " no");    SEC_PKCS7DestroyContentInfo(cinfo);    return 0;}