don't add dup digestAlgorithms
This commit is contained in:
@@ -1416,6 +1416,12 @@ cert_process(hx509_context context, void *ctx, hx509_cert cert)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
cmp_AlgorithmIdentifier(const AlgorithmIdentifier *p, const AlgorithmIdentifier *q)
|
||||||
|
{
|
||||||
|
return der_heim_oid_cmp(&p->algorithm, &q->algorithm);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
hx509_cms_create_signed(hx509_context context,
|
hx509_cms_create_signed(hx509_context context,
|
||||||
int flags,
|
int flags,
|
||||||
@@ -1428,7 +1434,7 @@ hx509_cms_create_signed(hx509_context context,
|
|||||||
hx509_certs pool,
|
hx509_certs pool,
|
||||||
heim_octet_string *signed_data)
|
heim_octet_string *signed_data)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i, j;
|
||||||
hx509_name name;
|
hx509_name name;
|
||||||
int ret;
|
int ret;
|
||||||
size_t size;
|
size_t size;
|
||||||
@@ -1511,22 +1517,19 @@ hx509_cms_create_signed(hx509_context context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sigctx.sd.signerInfos.len) {
|
if (sigctx.sd.signerInfos.len) {
|
||||||
ALLOC_SEQ(&sigctx.sd.digestAlgorithms, sigctx.sd.signerInfos.len);
|
|
||||||
if (sigctx.sd.digestAlgorithms.val == NULL) {
|
|
||||||
ret = ENOMEM;
|
|
||||||
hx509_clear_error_string(context);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* XXX remove dups */
|
|
||||||
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;
|
||||||
ret = copy_AlgorithmIdentifier(di,
|
|
||||||
&sigctx.sd.digestAlgorithms.val[i]);
|
for (j = 0; j < sigctx.sd.digestAlgorithms.len; j++)
|
||||||
if (ret) {
|
if (cmp_AlgorithmIdentifier(di, &sigctx.sd.digestAlgorithms.val[j]) == 0)
|
||||||
hx509_clear_error_string(context);
|
break;
|
||||||
goto out;
|
if (j < sigctx.sd.digestAlgorithms.len) {
|
||||||
|
ret = add_DigestAlgorithmIdentifiers(&sigctx.sd.digestAlgorithms, di);
|
||||||
|
if (ret) {
|
||||||
|
hx509_clear_error_string(context);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user