xref: /plan9/sys/src/cmd/auth/rsagen.c (revision fb7f0c934c48abaed6040d054ef636408c3c522d)
1 #include <u.h>
2 #include <libc.h>
3 #include <mp.h>
4 #include <libsec.h>
5 
6 void
usage(void)7 usage(void)
8 {
9 	fprint(2, "usage: auth/rsagen [-b bits] [-t 'attr=value attr=value ...']\n");
10 	exits("usage");
11 }
12 
13 void
main(int argc,char ** argv)14 main(int argc, char **argv)
15 {
16 	char *s;
17 	int bits;
18 	char *tag;
19 	RSApriv *key;
20 
21 	bits = 1024;
22 	tag = nil;
23 	key = nil;
24 	fmtinstall('B', mpfmt);
25 
26 	ARGBEGIN{
27 	case 'b':
28 		bits = atoi(EARGF(usage()));
29 		if(bits == 0)
30 			usage();
31 		break;
32 	case 't':
33 		tag = EARGF(usage());
34 		break;
35 	default:
36 		usage();
37 	}ARGEND
38 
39 	if(argc != 0)
40 		usage();
41 
42 	do{
43 		if(key)
44 			rsaprivfree(key);
45 		key = rsagen(bits, 6, 0);
46 	}while(mpsignif(key->pub.n) != bits);
47 
48 	s = smprint("key proto=rsa %s%ssize=%d ek=%B !dk=%B n=%B !p=%B !q=%B !kp=%B !kq=%B !c2=%B\n",
49 		tag ? tag : "", tag ? " " : "",
50 		mpsignif(key->pub.n), key->pub.ek,
51 		key->dk, key->pub.n, key->p, key->q,
52 		key->kp, key->kq, key->c2);
53 	if(s == nil)
54 		sysfatal("smprint: %r");
55 
56 	if(write(1, s, strlen(s)) != strlen(s))
57 		sysfatal("write: %r");
58 
59 	exits(nil);
60 }
61