rsc | 57fcfc2 | 2005-02-13 18:04:20 +0000 | [diff] [blame] | 1 | #include <u.h> |
| 2 | #include <libc.h> |
| 3 | #include <bio.h> |
| 4 | #include <mp.h> |
| 5 | #include <libsec.h> |
| 6 | |
| 7 | void |
| 8 | usage(void) |
| 9 | { |
| 10 | fprint(2, "auth/asn12rsa [-t tag] [file]\n"); |
| 11 | exits("usage"); |
| 12 | } |
| 13 | |
| 14 | void |
| 15 | main(int argc, char **argv) |
| 16 | { |
| 17 | char *s; |
| 18 | uchar *buf; |
| 19 | int fd; |
| 20 | long n, tot; |
| 21 | char *tag, *file; |
| 22 | RSApriv *key; |
| 23 | |
| 24 | fmtinstall('B', mpfmt); |
| 25 | |
| 26 | tag = nil; |
| 27 | ARGBEGIN{ |
| 28 | case 't': |
| 29 | tag = EARGF(usage()); |
| 30 | break; |
| 31 | default: |
| 32 | usage(); |
| 33 | }ARGEND |
| 34 | |
| 35 | if(argc != 0 && argc != 1) |
| 36 | usage(); |
| 37 | |
| 38 | if(argc == 1) |
| 39 | file = argv[0]; |
| 40 | else |
| 41 | file = "/dev/stdin"; |
| 42 | |
| 43 | if((fd = open(file, OREAD)) < 0) |
| 44 | sysfatal("open %s: %r", file); |
| 45 | buf = nil; |
| 46 | tot = 0; |
| 47 | for(;;){ |
| 48 | buf = realloc(buf, tot+8192); |
| 49 | if(buf == nil) |
| 50 | sysfatal("realloc: %r"); |
| 51 | if((n = read(fd, buf+tot, 8192)) < 0) |
| 52 | sysfatal("read: %r"); |
| 53 | if(n == 0) |
| 54 | break; |
| 55 | tot += n; |
| 56 | } |
| 57 | |
| 58 | key = asn1toRSApriv(buf, tot); |
| 59 | if(key == nil) |
| 60 | sysfatal("couldn't parse asn1 key"); |
| 61 | |
rsc | 6acff93 | 2005-02-13 22:10:33 +0000 | [diff] [blame] | 62 | s = smprint("key proto=rsa %s%ssize=%d ek=%lB !dk=%lB n=%lB !p=%lB !q=%lB !kp=%lB !kq=%lB !c2=%lB\n", |
rsc | 57fcfc2 | 2005-02-13 18:04:20 +0000 | [diff] [blame] | 63 | tag ? tag : "", tag ? " " : "", |
| 64 | mpsignif(key->pub.n), key->pub.ek, |
| 65 | key->dk, key->pub.n, key->p, key->q, |
| 66 | key->kp, key->kq, key->c2); |
| 67 | if(s == nil) |
| 68 | sysfatal("smprint: %r"); |
| 69 | write(1, s, strlen(s)); |
| 70 | exits(0); |
| 71 | } |