From cc08be523a2a647a999dcf82dcce9dee62b4162c Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Wed, 30 Nov 2016 16:00:29 +0000 Subject: sbearssl: allow DER-encoded certificates in TA directory --- src/sbearssl/sbearssl_ta_certs.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/sbearssl/sbearssl_ta_certs.c (limited to 'src/sbearssl/sbearssl_ta_certs.c') diff --git a/src/sbearssl/sbearssl_ta_certs.c b/src/sbearssl/sbearssl_ta_certs.c new file mode 100644 index 0000000..42b6115 --- /dev/null +++ b/src/sbearssl/sbearssl_ta_certs.c @@ -0,0 +1,36 @@ +/* ISC license. */ + +#include +#include +#include +#include +#include + +int sbearssl_ta_certs (genalloc *taga, stralloc *tasa, sbearssl_cert const *certs, size_t certn, char const *certstorage) +{ + size_t tagabase = genalloc_len(sbearssl_ta, taga) ; + size_t tasabase = tasa->len ; + size_t i = 0 ; + int tagawasnull = !genalloc_s(sbearssl_ta, taga) ; + int tasawasnull = !tasa->s ; + int r ; + + for (; i < certn ; i++) + { + sbearssl_ta ta ; + int r = sbearssl_ta_cert(&ta, certs + i, certstorage, tasa) ; + if (r) goto fail ; + if (!genalloc_append(sbearssl_ta, taga, &ta)) goto rfail ; + } + + return 0 ; + + rfail: + r = -1 ; + fail: + if (tagawasnull) genalloc_free(sbearssl_ta, taga) ; + else genalloc_setlen(sbearssl_ta, taga, tagabase) ; + if (tasawasnull) stralloc_free(tasa) ; + else tasa->len = tasabase ; + return r ; +} -- cgit v1.3.1