Fix logic for adding digestAlgorithm, original patch from Douglas E Engert.

This commit is contained in:
Love Hornquist Astrand
2011-05-17 07:43:42 -07:00
parent e00ae9267f
commit 2ac7566997

View File

@@ -1528,6 +1528,10 @@ hx509_cms_create_signed(hx509_context context,
} }
if (sigctx.sd.signerInfos.len) { if (sigctx.sd.signerInfos.len) {
/*
* For each signerInfo, collect all different digest types.
*/
for (i = 0; i < sigctx.sd.signerInfos.len; i++) { for (i = 0; i < sigctx.sd.signerInfos.len; i++) {
AlgorithmIdentifier *di = AlgorithmIdentifier *di =
&sigctx.sd.signerInfos.val[i].digestAlgorithm; &sigctx.sd.signerInfos.val[i].digestAlgorithm;
@@ -1535,7 +1539,7 @@ hx509_cms_create_signed(hx509_context context,
for (j = 0; j < sigctx.sd.digestAlgorithms.len; j++) for (j = 0; j < sigctx.sd.digestAlgorithms.len; j++)
if (cmp_AlgorithmIdentifier(di, &sigctx.sd.digestAlgorithms.val[j]) == 0) if (cmp_AlgorithmIdentifier(di, &sigctx.sd.digestAlgorithms.val[j]) == 0)
break; break;
if (j < sigctx.sd.digestAlgorithms.len) { if (j == sigctx.sd.digestAlgorithms.len) {
ret = add_DigestAlgorithmIdentifiers(&sigctx.sd.digestAlgorithms, di); ret = add_DigestAlgorithmIdentifiers(&sigctx.sd.digestAlgorithms, di);
if (ret) { if (ret) {
hx509_clear_error_string(context); hx509_clear_error_string(context);
@@ -1545,6 +1549,9 @@ hx509_cms_create_signed(hx509_context context,
} }
} }
/*
* Add certs we think are needed, build as part of sig_process
*/
if (sigctx.certs) { if (sigctx.certs) {
ALLOC(sigctx.sd.certificates, 1); ALLOC(sigctx.sd.certificates, 1);
if (sigctx.sd.certificates == NULL) { if (sigctx.sd.certificates == NULL) {