summaryrefslogtreecommitdiff
path: root/sys/src/cmd/auth/rsagen.c
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/auth/rsagen.c
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/auth/rsagen.c')
-rwxr-xr-xsys/src/cmd/auth/rsagen.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/sys/src/cmd/auth/rsagen.c b/sys/src/cmd/auth/rsagen.c
new file mode 100755
index 000000000..d05f562ef
--- /dev/null
+++ b/sys/src/cmd/auth/rsagen.c
@@ -0,0 +1,60 @@
+#include <u.h>
+#include <libc.h>
+#include <mp.h>
+#include <libsec.h>
+
+void
+usage(void)
+{
+ fprint(2, "usage: auth/rsagen [-b bits] [-t 'attr=value attr=value ...']\n");
+ exits("usage");
+}
+
+void
+main(int argc, char **argv)
+{
+ char *s;
+ int bits;
+ char *tag;
+ RSApriv *key;
+
+ bits = 1024;
+ tag = nil;
+ key = nil;
+ fmtinstall('B', mpfmt);
+
+ ARGBEGIN{
+ case 'b':
+ bits = atoi(EARGF(usage()));
+ if(bits == 0)
+ usage();
+ break;
+ case 't':
+ tag = EARGF(usage());
+ break;
+ default:
+ usage();
+ }ARGEND
+
+ if(argc != 0)
+ usage();
+
+ do{
+ if(key)
+ rsaprivfree(key);
+ key = rsagen(bits, 6, 0);
+ }while(mpsignif(key->pub.n) != bits);
+
+ 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",
+ tag ? tag : "", tag ? " " : "",
+ mpsignif(key->pub.n), key->pub.ek,
+ key->dk, key->pub.n, key->p, key->q,
+ key->kp, key->kq, key->c2);
+ if(s == nil)
+ sysfatal("smprint: %r");
+
+ if(write(1, s, strlen(s)) != strlen(s))
+ sysfatal("write: %r");
+
+ exits(nil);
+}