⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decodepem.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <mp.h>#include <libsec.h>#define STRLEN(s)	(sizeof(s)-1)uchar*decodePEM(char *s, char *type, int *len, char **new_s){	uchar *d;	char *t, *e, *tt;	int n;	*len = 0;	/*	 * find the correct section of the file, stripping garbage at the beginning and end.	 * the data is delimited by -----BEGIN <type>-----\n and -----END <type>-----\n	 */	n = strlen(type);	e = strchr(s, '\0');	for(t = s; t != nil && t < e; ){		tt = t;		t = strchr(tt, '\n');		if(t != nil)			t++;		if(strncmp(tt, "-----BEGIN ", STRLEN("-----BEGIN ")) == 0		&& strncmp(&tt[STRLEN("-----BEGIN ")], type, n) == 0		&& strncmp(&tt[STRLEN("-----BEGIN ")+n], "-----\n", STRLEN("-----\n")) == 0)			break;	}	for(tt = t; tt != nil && tt < e; tt++){		if(strncmp(tt, "-----END ", STRLEN("-----END ")) == 0		&& strncmp(&tt[STRLEN("-----END ")], type, n) == 0		&& strncmp(&tt[STRLEN("-----END ")+n], "-----\n", STRLEN("-----\n")) == 0)			break;		tt = strchr(tt, '\n');		if(tt == nil)			break;	}	if(tt == nil || tt == e){		werrstr("incorrect .pem file format: bad header or trailer");		return nil;	}	if(new_s)		*new_s = tt+1;	n = ((tt - t) * 6 + 7) / 8;	d = malloc(n);	if(d == nil){		werrstr("out of memory");		return nil;	}	n = dec64(d, n, t, tt - t);	if(n < 0){		free(d);		werrstr("incorrect .pem file format: bad base64 encoded data");		return nil;	}	*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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -