From cb1f6e53457001271f7fa39836fcdde986962cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Thu, 20 Apr 2006 19:37:32 +0000 Subject: [PATCH] Use hx509_cms_{,un}wrap_ContentInfo git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17116 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/hx509/hxtool.c | 88 ++++++++++++++-------------------------------- 1 file changed, 26 insertions(+), 62 deletions(-) diff --git a/lib/hx509/hxtool.c b/lib/hx509/hxtool.c index fca3b9b8e..40e6effdd 100644 --- a/lib/hx509/hxtool.c +++ b/lib/hx509/hxtool.c @@ -115,28 +115,22 @@ cms_verify_sd(struct cms_verify_sd_options *opt, int argc, char **argv) opt->certificate_strings.strings[i], ret); } + co.data = p; + co.length = sz; + if (opt->content_info_flag) { - ContentInfo ci; - size_t size; + heim_octet_string uwco; + heim_oid oid; - ret = decode_ContentInfo(p, sz, &ci, &size); + ret = hx509_cms_unwrap_ContentInfo(&co, &oid, &uwco, NULL); if (ret) - errx(1, "decode_ContentInfo: %d", ret); + errx(1, "hx509_cms_unwrap_ContentInfo: %d", ret); - if (heim_oid_cmp(&ci.contentType, oid_id_pkcs7_signedData()) != 0) + if (heim_oid_cmp(&oid, oid_id_pkcs7_signedData()) != 0) errx(1, "Content is not SignedData"); + free_oid(&oid); - if (ci.content == NULL) - errx(1, "ContentInfo missing content"); - ret = copy_octet_string(ci.content, &co); - if (ret) - errx(1, "copy_octet_string: %d", ret); - - free_ContentInfo(&ci); - - } else { - co.data = p; - co.length = sz; + co = uwco; } hx509_verify_attach_anchors(ctx, anchors); @@ -237,26 +231,14 @@ cms_create_sd(struct cms_create_sd_options *opt, int argc, char **argv) hx509_lock_free(lock); if (opt->content_info_flag) { - ContentInfo ci; - size_t size; + heim_octet_string wo; - ret = hx509_cms_wrap_ContentInfo(oid_id_pkcs7_signedData(), - &o, - &ci); + ret = hx509_cms_wrap_ContentInfo(oid_id_pkcs7_signedData(), &o, &wo); if (ret) errx(1, "hx509_cms_wrap_ContentInfo: %d", ret); free_octet_string(&o); - - ASN1_MALLOC_ENCODE(ContentInfo, o.data, o.length, &ci, - &size, ret); - if (ret) - errx(1, "encode ContentInfo"); - if (o.length != size) - _hx509_abort("internal ASN.1 encoder error"); - - free_ContentInfo(&ci); - + o = wo; } ret = _hx509_write_file(argv[1], o.data, o.length); @@ -284,28 +266,22 @@ cms_unenvelope(struct cms_unenvelope_options *opt, int argc, char **argv) if (ret) err(1, "map_file: %s: %d", argv[0], ret); + co.data = p; + co.length = sz; + if (opt->content_info_flag) { - ContentInfo ci; - size_t size; + heim_octet_string uwco; + heim_oid oid; - ret = decode_ContentInfo(p, sz, &ci, &size); + ret = hx509_cms_unwrap_ContentInfo(&co, &oid, &uwco, NULL); if (ret) - errx(1, "decode_ContentInfo: %d", ret); + errx(1, "hx509_cms_unwrap_ContentInfo: %d", ret); - if (heim_oid_cmp(&ci.contentType, oid_id_pkcs7_envelopedData()) != 0) + if (heim_oid_cmp(&oid, oid_id_pkcs7_envelopedData()) != 0) errx(1, "Content is not SignedData"); + free_oid(&oid); - if (ci.content == NULL) - errx(1, "ContentInfo missing content"); - ret = copy_octet_string(ci.content, &co); - if (ret) - errx(1, "copy_octet_string: %d", ret); - - free_ContentInfo(&ci); - - } else { - co.data = p; - co.length = sz; + co = uwco; } ret = hx509_certs_init(context, "MEMORY:cert-store", 0, NULL, &certs); @@ -382,26 +358,14 @@ cms_create_enveloped(struct cms_envelope_options *opt, int argc, char **argv) _hx509_unmap_file(p, sz); if (opt->content_info_flag) { - ContentInfo ci; - size_t size; + heim_octet_string wo; - ret = hx509_cms_wrap_ContentInfo(oid_id_pkcs7_envelopedData(), - &o, - &ci); + ret = hx509_cms_wrap_ContentInfo(oid_id_pkcs7_envelopedData(), &o, &wo); if (ret) errx(1, "hx509_cms_wrap_ContentInfo: %d", ret); free_octet_string(&o); - - ASN1_MALLOC_ENCODE(ContentInfo, o.data, o.length, &ci, - &size, ret); - if (ret) - errx(1, "encode ContentInfo"); - if (o.length != size) - _hx509_abort("internal ASN.1 encoder error"); - - free_ContentInfo(&ci); - + o = wo; } hx509_lock_free(lock);