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

📄 genrandom.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "os.h"#include <mp.h>#include <libsec.h>typedef struct State{	QLock		lock;	int		seeded;	uvlong		seed;	DES3state	des3;} State;static State x917state;static voidX917(uchar *rand, int nrand){	int i, m, n8;	uvlong I, x;	/* 1. Compute intermediate value I = Ek(time). */	I = nsec();	triple_block_cipher(x917state.des3.expanded, (uchar*)&I, 0); /* two-key EDE */	/* 2. x[i] = Ek(I^seed);  seed = Ek(x[i]^I); */	m = (nrand+7)/8;	for(i=0; i<m; i++){		x = I ^ x917state.seed;		triple_block_cipher(x917state.des3.expanded, (uchar*)&x, 0);		n8 = (nrand>8) ? 8 : nrand;		memcpy(rand, (uchar*)&x, n8);		rand += 8;		nrand -= 8;		x ^= I;		triple_block_cipher(x917state.des3.expanded, (uchar*)&x, 0);		x917state.seed = x;	}}static voidX917init(void){	int n;	uchar mix[128];	uchar key3[3][8];	ulong *ulp;	ulp = (ulong*)key3;	for(n = 0; n < sizeof(key3)/sizeof(ulong); n++)		ulp[n] = truerand();	setupDES3state(&x917state.des3, key3, nil);	X917(mix, sizeof mix);	x917state.seeded = 1;}voidgenrandom(uchar *p, int n){	qlock(&x917state.lock);	if(x917state.seeded == 0)		X917init();	X917(p, n);	qunlock(&x917state.lock);}

⌨️ 快捷键说明

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