From 018025f0f36a4847df265c9948dbaf7073ed3245 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Fri, 25 Nov 2016 18:16:05 +0000 Subject: Alpha version of the SSL work. Doesn't build yet, but I'm scared of losing it, so using git as storage. Will fix the stupid bugs now, the tricky bugs later. --- src/sbearssl/sbearssl_pem_push.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/sbearssl/sbearssl_pem_push.c (limited to 'src/sbearssl/sbearssl_pem_push.c') diff --git a/src/sbearssl/sbearssl_pem_push.c b/src/sbearssl/sbearssl_pem_push.c new file mode 100644 index 0000000..b4903de --- /dev/null +++ b/src/sbearssl/sbearssl_pem_push.c @@ -0,0 +1,38 @@ +/* ISC license. */ + +#include +#include +#include +#include +#include +#include "sbearssl-internal.h" + +int sbearssl_pem_push (br_pem_decoder_context *ctx, char const *s, size_t len, sbearssl_pemobject *po, genalloc *list, sbearssl_strallocerr *blah, int *inobj) +{ + while (len) + { + size_t tlen = br_pem_decoder_push(ctx, s, len) ; + if (blah->err) return (errno = blah->err, -1) ; + s += tlen ; len -= tlen ; + switch (br_pem_decoder_event(ctx)) + { + case BR_PEM_BEGIN_OBJ ; + po->name = blah->sa->len ; + if (!stralloc_cats(blah->sa, br_pem_decoder_name(ctx)) || !stralloc_0(blah->sa)) return -1 ; + po->data = blah->sa->len ; + br_pem_decoder_setdest(&ctx, &sbearssl_append, blah) ; + *inobj = 1 ; + break ; + case BR_PEM_END_OBJ : + if (*inobj) + { + po->datalen = blah->sa->len - po->data ; + if (!genalloc_append(sbearssl_pemobject, list, po)) return 0 ; + *inobj = 0 ; + } + break ; + case BR_PEM_ERROR : return (errno = EINVAL, -1) ; + } + } + return 0 ; +} -- cgit v1.3.1