1 #include <u.h> 2 #include <libc.h> 3 #include <mp.h> 4 #include <fcall.h> 5 #include <thread.h> 6 #include <9p.h> 7 #include <auth.h> 8 #include <authsrv.h> 9 #include <libsec.h> 10 #include "netssh.h" 11 12 Cipher *cryptos[1]; 13 int debug; 14 15 void 16 usage(void) 17 { 18 fprint(2, "usage: %s [file]\n", argv0); 19 exits("usage"); 20 } 21 22 void 23 main(int argc, char *argv[]) 24 { 25 Packet *p; 26 char *ep, *np, *user; 27 mpint *e, *n; 28 int fd, m; 29 char key[Maxrpcbuf], encpub[Maxrpcbuf]; 30 31 ARGBEGIN { 32 default: 33 usage(); 34 } ARGEND 35 if (argc > 1) 36 usage(); 37 38 user = getenv("user"); 39 if (argc == 0) 40 fd = 0; 41 else { 42 fd = open(argv[0], OREAD); 43 if (fd < 0) 44 usage(); 45 } 46 m = read(fd, key, Maxrpcbuf - 1); 47 close(fd); 48 key[m >= 0? m: 0] = 0; 49 50 ep = strstr(key, " ek="); 51 np = strstr(key, " n="); 52 if (ep == nil || np == nil) 53 sysfatal("bad key file\n"); 54 e = strtomp(ep+4, nil, 16, nil); 55 n = strtomp(np+3, nil, 16, nil); 56 p = new_packet(nil); 57 add_string(p, "ssh-rsa"); 58 add_mp(p, e); 59 add_mp(p, n); 60 if ((m = enc64(encpub, Maxrpcbuf, p->payload, p->rlength-1)) < 0) 61 sysfatal("base-64 encoding failed\n"); 62 print("ssh-rsa "); 63 write(1, encpub, m); 64 if (user) 65 print(" %s\n", user); 66 } 67