(hx509_cms_create_signed_1): Use hx509_peer_info to select the

signature algorithm too.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20937 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2007-06-06 20:50:55 +00:00
parent 5c70b04159
commit a93b07021f

View File

@@ -946,7 +946,7 @@ hx509_cms_create_signed_1(hx509_context context,
AlgorithmIdentifier digest; AlgorithmIdentifier digest;
hx509_name name; hx509_name name;
SignerInfo *signer_info; SignerInfo *signer_info;
heim_octet_string buf, content, sigdata; heim_octet_string buf, content, sigdata = { 0, NULL };
SignedData sd; SignedData sd;
int ret; int ret;
size_t size; size_t size;
@@ -1050,10 +1050,8 @@ hx509_cms_create_signed_1(hx509_context context,
&content, &content,
NULL, NULL,
&sig); &sig);
if (ret) { if (ret)
hx509_clear_error_string(context);
goto out; goto out;
}
ASN1_MALLOC_ENCODE(MessageDigest, ASN1_MALLOC_ENCODE(MessageDigest,
buf.data, buf.data,
@@ -1120,17 +1118,24 @@ hx509_cms_create_signed_1(hx509_context context,
} }
ret = _hx509_create_signature(context, {
_hx509_cert_private_key(cert), AlgorithmIdentifier sigalg;
_hx509_crypto_default_sig_alg,
&sigdata, ret = hx509_crypto_select(context, HX509_SELECT_PUBLIC_SIG,
&signer_info->signatureAlgorithm, _hx509_cert_private_key(cert), peer,
&signer_info->signature); &sigalg);
if (sigdata.data != content.data) if (ret)
der_free_octet_string(&sigdata); goto out;
if (ret) {
hx509_clear_error_string(context); ret = _hx509_create_signature(context,
goto out; _hx509_cert_private_key(cert),
&sigalg,
&sigdata,
&signer_info->signatureAlgorithm,
&signer_info->signature);
free_AlgorithmIdentifier(&sigalg);
if (ret)
goto out;
} }
ALLOC_SEQ(&sd.digestAlgorithms, 1); ALLOC_SEQ(&sd.digestAlgorithms, 1);
@@ -1199,6 +1204,8 @@ hx509_cms_create_signed_1(hx509_context context,
_hx509_abort("internal ASN.1 encoder error"); _hx509_abort("internal ASN.1 encoder error");
out: out:
if (sigdata.data != content.data)
der_free_octet_string(&sigdata);
free_AlgorithmIdentifier(&digest); free_AlgorithmIdentifier(&digest);
_hx509_path_free(&path); _hx509_path_free(&path);
free_SignedData(&sd); free_SignedData(&sd);