summaryrefslogtreecommitdiffstats
path: root/wgtpkg-certs.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2015-12-03 15:30:21 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2015-12-03 15:30:21 +0100
commit82a1641c0570e6548649dac932853959854cd706 (patch)
tree18437659a193dec4a14ae5b40b8e0b74a28385d5 /wgtpkg-certs.c
parent3c72eb90658c072d50b18c48f2d8857bbc546b42 (diff)
allows concatenation of multiple certificates
Change-Id: If7352761b49e1ba5ff76800fa4fb093b8cb878f2
Diffstat (limited to 'wgtpkg-certs.c')
-rw-r--r--wgtpkg-certs.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/wgtpkg-certs.c b/wgtpkg-certs.c
index c103c51..1d8b976 100644
--- a/wgtpkg-certs.c
+++ b/wgtpkg-certs.c
@@ -42,16 +42,22 @@ static int add_certificate_x509(X509 *x)
static int add_certificate_bin(const char *bin, int len)
{
int rc;
- const unsigned char *b = (const unsigned char *)bin;
- X509 *x = d2i_X509(NULL, &b, len);
- if (x == NULL) {
- syslog(LOG_ERR, "d2i_X509 failed");
- return -1;
+ const char *b, *e;
+ b = bin;
+ e = bin + len;
+ while (len) {
+ X509 *x = d2i_X509(NULL, (const unsigned char **)&b, e-b);
+ if (x == NULL) {
+ syslog(LOG_ERR, "d2i_X509 failed");
+ return -1;
+ }
+ rc = add_certificate_x509(x);
+ if (rc) {
+ X509_free(x);
+ return rc;
+ }
}
- rc = add_certificate_x509(x);
- if (rc)
- X509_free(x);
- return rc;
+ return 0;
}
int add_certificate_b64(const char *b64)