diff options
Diffstat (limited to 'src/libsec/port/decodepem.c')
-rw-r--r-- | src/libsec/port/decodepem.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/libsec/port/decodepem.c b/src/libsec/port/decodepem.c index 194a4558..a0b00946 100644 --- a/src/libsec/port/decodepem.c +++ b/src/libsec/port/decodepem.c @@ -6,7 +6,7 @@ #define STRLEN(s) (sizeof(s)-1) uchar* -decodepem(char *s, char *type, int *len) +decodepem(char *s, char *type, int *len, char **news) { uchar *d; char *t, *e, *tt; @@ -44,6 +44,8 @@ decodepem(char *s, char *type, int *len) return nil; } + if(news) + *news = tt+1; n = ((tt - t) * 6 + 7) / 8; d = malloc(n); if(d == nil){ @@ -59,3 +61,29 @@ decodepem(char *s, char *type, int *len) *len = n; return d; } + +PEMChain* +decodepemchain(char *s, char *type) +{ + PEMChain *first = nil, *last = nil, *chp; + uchar *d; + char *e; + int n; + + e = strchr(s, '\0'); + while (s < e) { + d = decodepem(s, type, &n, &s); + if(d == nil) + break; + chp = malloc(sizeof(PEMChain)); + chp->next = nil; + chp->pem = d; + chp->pemlen = n; + if (first == nil) + first = chp; + else + last->next = chp; + last = chp; + } + return first; +} |