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