summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2015-02-25 13:20:56 +0200
committerAndras Timar <andras.timar@collabora.com>2015-03-05 16:45:46 +0100
commitda4008f9d210b17adf98d1565d221a038270d672 (patch)
tree15b6ea85e0c8d4585cf43ec369e384f9ecba07c5 /vcl
parent5cf3b2d51cb439a07bc067fa401588d2d9ee6fae (diff)
tdf#84881: Slight refactoring and redordering of function calls
No change to functionality or end result. Preparation for an attempt to fix the remaining problem with RFC3161 timestamped signature. Change-Id: I5790a85399e9f94d816e8fab791a03d607113116 (cherry picked from commit 0874849206a38cbe15cc981b6cb814d3a7abf38b)
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx158
1 files changed, 95 insertions, 63 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 10cbe473eb28..c0fdbf74b830 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -6592,6 +6592,98 @@ my_NSS_CMSSignerInfo_AddUnauthAttr(NSSCMSSignerInfo *signerinfo, NSSCMSAttribute
return my_NSS_CMSAttributeArray_AddAttr(signerinfo->cmsg->poolp, &(signerinfo->unAuthAttr), attr);
}
+NSSCMSMessage *CreateCMSMessage(NSSCMSSignedData **cms_sd,
+ NSSCMSSignerInfo **cms_signer,
+ CERTCertificate *cert,
+ SECItem *digest)
+{
+ NSSCMSMessage *result = NSS_CMSMessage_Create(NULL);
+ if (!result)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSMessage_Create failed");
+ return NULL;
+ }
+
+ *cms_sd = NSS_CMSSignedData_Create(result);
+ if (!*cms_sd)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_Create failed");
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ NSSCMSContentInfo *cms_cinfo = NSS_CMSMessage_GetContentInfo(result);
+ if (NSS_CMSContentInfo_SetContent_SignedData(result, cms_cinfo, *cms_sd) != SECSuccess)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSContentInfo_SetContent_SignedData failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ cms_cinfo = NSS_CMSSignedData_GetContentInfo(*cms_sd);
+
+ // Attach NULL data as detached data
+ if (NSS_CMSContentInfo_SetContent_Data(result, cms_cinfo, NULL, PR_TRUE) != SECSuccess)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSContentInfo_SetContent_Data failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ *cms_signer = NSS_CMSSignerInfo_Create(result, cert, SEC_OID_SHA1);
+ if (!*cms_signer)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSSignerInfo_Create failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ if (NSS_CMSSignerInfo_AddSigningTime(*cms_signer, PR_Now()) != SECSuccess)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSSignerInfo_AddSigningTime failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ if (NSS_CMSSignerInfo_IncludeCerts(*cms_signer, NSSCMSCM_CertChain, certUsageEmailSigner) != SECSuccess)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSSignerInfo_IncludeCerts failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ if (NSS_CMSSignedData_AddCertificate(*cms_sd, cert) != SECSuccess)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_AddCertificate failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ if (NSS_CMSSignedData_AddSignerInfo(*cms_sd, *cms_signer) != SECSuccess)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_AddSignerInfo failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ if (NSS_CMSSignedData_SetDigestValue(*cms_sd, SEC_OID_SHA1, digest) != SECSuccess)
+ {
+ SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_SetDigestValue failed");
+ NSS_CMSSignedData_Destroy(*cms_sd);
+ NSS_CMSMessage_Destroy(result);
+ return NULL;
+ }
+
+ return result;
+}
+
#if 0
{
#endif
@@ -6711,41 +6803,11 @@ bool PDFWriterImpl::finalizeSignature()
HASH_End(hc.get(), digest.data, &digest.len, SHA1_LENGTH);
hc.clear();
- NSSCMSMessage *cms_msg = NSS_CMSMessage_Create(NULL);
+ NSSCMSSignedData *cms_sd;
+ NSSCMSSignerInfo *cms_signer;
+ NSSCMSMessage *cms_msg = CreateCMSMessage(&cms_sd, &cms_signer, cert, &digest);
if (!cms_msg)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSMessage_Create failed");
- return false;
- }
-
- NSSCMSSignedData *cms_sd = NSS_CMSSignedData_Create(cms_msg);
- if (!cms_sd)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_Create failed");
- return false;
- }
-
- NSSCMSContentInfo *cms_cinfo = NSS_CMSMessage_GetContentInfo(cms_msg);
- if (NSS_CMSContentInfo_SetContent_SignedData(cms_msg, cms_cinfo, cms_sd) != SECSuccess)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSContentInfo_SetContent_SignedData failed");
- return false;
- }
-
- cms_cinfo = NSS_CMSSignedData_GetContentInfo(cms_sd);
- //attach NULL data as detached data
- if (NSS_CMSContentInfo_SetContent_Data(cms_msg, cms_cinfo, NULL, PR_TRUE) != SECSuccess)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSContentInfo_SetContent_Data failed");
return false;
- }
-
- NSSCMSSignerInfo *cms_signer = NSS_CMSSignerInfo_Create(cms_msg, cert, SEC_OID_SHA1);
- if (!cms_signer)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSSignerInfo_Create failed");
- return false;
- }
NSSCMSAttribute timestamp;
SECItem values[2];
@@ -6965,36 +7027,6 @@ bool PDFWriterImpl::finalizeSignature()
return false;
}
}
- else if (NSS_CMSSignerInfo_AddSigningTime(cms_signer, PR_Now()) != SECSuccess)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSSignerInfo_AddSigningTime failed");
- return false;
- }
-
- if (NSS_CMSSignerInfo_IncludeCerts(cms_signer, NSSCMSCM_CertChain, certUsageEmailSigner) != SECSuccess)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSSignerInfo_IncludeCerts failed");
- return false;
- }
-
- if (NSS_CMSSignedData_AddCertificate(cms_sd, cert) != SECSuccess)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_AddCertificate failed");
- return false;
- }
-
- if (NSS_CMSSignedData_AddSignerInfo(cms_sd, cms_signer) != SECSuccess)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_AddSignerInfo failed");
- return false;
- }
-
- if (NSS_CMSSignedData_SetDigestValue(cms_sd, SEC_OID_SHA1, &digest) != SECSuccess)
- {
- SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_SetDigestValue failed");
- return false;
- }
-
SECItem cms_output;
cms_output.data = 0;
cms_output.len = 0;