Enable writing out signed data as a pem attachment.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21303 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -236,6 +236,7 @@ cms_create_sd(struct cms_create_sd_options *opt, int argc, char **argv) | |||||||
|     size_t sz; |     size_t sz; | ||||||
|     void *p; |     void *p; | ||||||
|     int ret, flags = 0; |     int ret, flags = 0; | ||||||
|  |     char *signer_name = NULL; | ||||||
|  |  | ||||||
|     memset(&contentType, 0, sizeof(contentType)); |     memset(&contentType, 0, sizeof(contentType)); | ||||||
|  |  | ||||||
| @@ -301,6 +302,20 @@ cms_create_sd(struct cms_create_sd_options *opt, int argc, char **argv) | |||||||
|     if (ret) |     if (ret) | ||||||
| 	errx(1, "hx509_cms_create_signed: %d", ret); | 	errx(1, "hx509_cms_create_signed: %d", ret); | ||||||
|  |  | ||||||
|  |     { | ||||||
|  | 	hx509_name name; | ||||||
|  | 	 | ||||||
|  | 	ret = hx509_cert_get_subject(cert, &name); | ||||||
|  | 	if (ret) | ||||||
|  | 	    errx(1, "hx509_cert_get_subject"); | ||||||
|  | 	 | ||||||
|  | 	ret = hx509_name_to_string(name, &signer_name); | ||||||
|  | 	hx509_name_free(&name); | ||||||
|  | 	if (ret) | ||||||
|  | 	    errx(1, "hx509_name_to_string"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     hx509_certs_free(&anchors); |     hx509_certs_free(&anchors); | ||||||
|     hx509_certs_free(&pool); |     hx509_certs_free(&pool); | ||||||
|     hx509_cert_free(cert); |     hx509_cert_free(cert); | ||||||
| @@ -321,10 +336,37 @@ cms_create_sd(struct cms_create_sd_options *opt, int argc, char **argv) | |||||||
| 	o = wo; | 	o = wo; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ret = _hx509_write_file(argv[1], o.data, o.length); |     if (opt->pem_flag) { | ||||||
|     if (ret) | 	char *headers[3]; | ||||||
| 	errx(1, "hx509_write_file: %d", ret); | 	FILE *f; | ||||||
|  |  | ||||||
|  | 	if (opt->detached_signature_flag) | ||||||
|  | 	    headers[0] = "Content-disposition: detached"; | ||||||
|  | 	else | ||||||
|  | 	    headers[0] = "Content-disposition: inline"; | ||||||
|  | 	asprintf(&headers[1], "Signer: %s", signer_name); | ||||||
|  | 	if (headers[1] == NULL) | ||||||
|  | 	    errx(1, "out of memory"); | ||||||
|  | 	headers[2] = NULL; | ||||||
|  |  | ||||||
|  | 	f = fopen(argv[1], "w"); | ||||||
|  | 	if (f == NULL) | ||||||
|  | 	    err(1, "open %s", argv[1]); | ||||||
|  | 	 | ||||||
|  | 	ret = hx509_pem_write(context, "CMS SIGNEDDATA", headers, f,  | ||||||
|  | 			      o.data, o.length); | ||||||
|  | 	fclose(f); | ||||||
|  | 	free(headers[1]); | ||||||
|  | 	if (ret) | ||||||
|  | 	    errx(1, "hx509_pem_write: %d", ret); | ||||||
|  |  | ||||||
|  |     } else { | ||||||
|  | 	ret = _hx509_write_file(argv[1], o.data, o.length); | ||||||
|  | 	if (ret) | ||||||
|  | 	    errx(1, "hx509_write_file: %d", ret); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     free(signer_name); | ||||||
|     free(o.data); |     free(o.data); | ||||||
|  |  | ||||||
|     return 0; |     return 0; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand