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