forsyth20121205-174063a80cc13 years agoHistory
83 lines · 1.5 KB · Brainfuck
RawDownload
implement Getpk;include "sys.m";	sys: Sys;include "draw.m";include "arg.m";include "keyring.m";	keyring: Keyring; Getpk: module {	init: fn(nil: ref Draw->Context, argv: list of string);}; badmodule(p: string){	sys->fprint(sys->fildes(2), "getpk: cannot load %s: %r\n", p);	raise "fail:bad module";} init(nil: ref Draw->Context, argv: list of string){	sys = load Sys Sys->PATH;	keyring = load Keyring Keyring->PATH;	if(keyring == nil)		badmodule(Keyring->PATH);	arg := load Arg Arg->PATH;	if(arg == nil)		badmodule(Arg->PATH);	arg->init(argv);	arg->setusage("usage: getpk [-asu] file...");	aflag := 0;	sflag := 0;	uflag := 0;	while((opt := arg->opt()) != 0){		case opt {		's' =>			sflag++;		'a' =>			aflag++;		'u' =>			uflag++;		* =>			arg->usage();		}	}	argv = arg->argv();	if(argv == nil)		arg->usage();	multi := len argv > 1;	for(; argv != nil; argv = tl argv){		info := keyring->readauthinfo(hd argv);		if(info == nil){			sys->fprint(sys->fildes(2), "getpk: cannot read %s: %r\n", hd argv);			continue;		}		pk := info.mypk;		if(sflag)			pk = info.spk;		s := keyring->pktostr(pk);		if(!aflag)			s = hex(hash(s));		if(multi)			s = hd argv + ": " + s;		if(uflag)			s += " " + pk.owner;		sys->print("%s\n", s);	}} hash(s: string): array of byte{	d := array of byte s;	digest := array[Keyring->SHA1dlen] of byte;	keyring->sha1(d, len d, digest, nil);	return digest;} hex(a: array of byte): string{	s := "";	for(i := 0; i < len a; i++)		s += sys->sprint("%2.2ux", int a[i]);	return s;}