aboutsummaryrefslogtreecommitdiff
path: root/src/libsec/port/decodepem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsec/port/decodepem.c')
-rw-r--r--src/libsec/port/decodepem.c30
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;
+}