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

📄 thumb.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <auth.h>#include <mp.h>#include <libsec.h>enum{ ThumbTab = 1<<10 };static void *emalloc(int n){	void *p;	if(n==0)		n=1;	p = malloc(n);	if(p == nil){		exits("out of memory");	}	memset(p, 0, n);	return p;}voidfreeThumbprints(Thumbprint *table){	Thumbprint *hd, *p, *q;	for(hd = table; hd < table+ThumbTab; hd++){		for(p = hd->next; p; p = q){			q = p->next;			free(p);		}	}	free(table);}intokThumbprint(uchar *sum, Thumbprint *table){	Thumbprint *p;	int i = ((sum[0]<<8) + sum[1]) & (ThumbTab-1);	for(p = table[i].next; p; p = p->next)		if(memcmp(sum, p->sha1, SHA1dlen) == 0)			return 1;	return 0;}static voidloadThumbprints(char *file, Thumbprint *table, Thumbprint *crltab){	Thumbprint *entry;	Biobuf *bin;	char *line, *field[50];	uchar sum[SHA1dlen];	int i;	bin = Bopen(file, OREAD);	if(bin == nil)		return;	for(; (line = Brdstr(bin, '\n', 1)) != 0; free(line)){		if(tokenize(line, field, nelem(field)) < 2)			continue;		if(strcmp(field[0], "#include") == 0){			loadThumbprints(field[1], table, crltab);			continue;		}		if(strcmp(field[0], "x509") != 0 || strncmp(field[1], "sha1=", strlen("sha1=")) != 0)			continue;		field[1] += strlen("sha1=");		dec16(sum, sizeof(sum), field[1], strlen(field[1]));		if(crltab && okThumbprint(sum, crltab))			continue;		entry = (Thumbprint*)emalloc(sizeof(*entry));		memcpy(entry->sha1, sum, SHA1dlen);		i = ((sum[0]<<8) + sum[1]) & (ThumbTab-1);		entry->next = table[i].next;		table[i].next = entry;	}	Bterm(bin);}Thumbprint *initThumbprints(char *ok, char *crl){	Thumbprint *table, *crltab = nil;	if(crl){		crltab = emalloc(ThumbTab * sizeof(*table));		loadThumbprints(crl, crltab, nil);	}	table = emalloc(ThumbTab * sizeof(*table));	loadThumbprints(ok, table, crltab);	free(crltab);	return table;}

⌨️ 快捷键说明

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