44 lines · 725 B · C
RawDownload
#include "os.h"#include <libsec.h> static voidinit(Chachastate *cs){	ulong seed[11];	int i; 	for(i=0; i<nelem(seed); i++)		seed[i] = truerand(); 	setupChachastate(cs, (uchar*)&seed[0], 32, (uchar*)&seed[8], 12, 20);	memset(seed, 0, sizeof(seed));} static voidfill(Chachastate *cs, uchar *p, int n){	Chachastate c; 	c = *cs;	chacha_encrypt((uchar*)&cs->input[4], 32, &c);	if(++cs->input[13] == 0)		if(++cs->input[14] == 0)			++cs->input[15]; 	chacha_encrypt(p, n, &c);	memset(&c, 0, sizeof(c));} voidgenrandom(uchar *p, int n){	static QLock lk;	static Chachastate cs; 	qlock(&lk);	if(cs.rounds == 0)		init(&cs);	cs.input[4] ^= getpid();	/* fork protection */	fill(&cs, p, n);	qunlock(&lk);}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t