aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/auth/dsa2ssh.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/auth/dsa2ssh.c')
-rw-r--r--src/cmd/auth/dsa2ssh.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/cmd/auth/dsa2ssh.c b/src/cmd/auth/dsa2ssh.c
new file mode 100644
index 00000000..489f2d21
--- /dev/null
+++ b/src/cmd/auth/dsa2ssh.c
@@ -0,0 +1,48 @@
+#include <u.h>
+#include <libc.h>
+#include <auth.h>
+#include <mp.h>
+#include <libsec.h>
+#include "rsa2any.h"
+
+void
+usage(void)
+{
+ fprint(2, "usage: auth/dsa2ssh [-c comment] [file]\n");
+ exits("usage");
+}
+
+void
+main(int argc, char **argv)
+{
+ DSApriv *k;
+ char *comment;
+ uchar buf[8192], *p;
+
+ fmtinstall('B', mpfmt);
+ fmtinstall('[', encodefmt);
+ comment = "";
+ ARGBEGIN{
+ case 'c':
+ comment = EARGF(usage());
+ break;
+ default:
+ usage();
+ }ARGEND
+
+ if(argc > 1)
+ usage();
+
+ if((k = getdsakey(argc, argv, 0, nil)) == nil)
+ sysfatal("%r");
+
+ p = buf;
+ p = put4(p, 7);
+ p = putn(p, "ssh-dss", 7);
+ p = putmp2(p, k->pub.p);
+ p = putmp2(p, k->pub.q);
+ p = putmp2(p, k->pub.alpha);
+ p = putmp2(p, k->pub.key);
+ print("ssh-dss %.*[ %s\n", p-buf, buf, comment);
+ exits(nil);
+}