| #include <u.h> |
| #include <libc.h> |
| #include <mp.h> |
| #include <libsec.h> |
| |
| void |
| usage(void) |
| { |
| fprint(2, "usage: auth/rsagen [-b bits] [-t 'attr=value attr=value ...']\n"); |
| exits("usage"); |
| } |
| |
| void |
| main(int argc, char **argv) |
| { |
| char *s; |
| int bits; |
| char *tag; |
| RSApriv *key; |
| |
| bits = 1024; |
| tag = nil; |
| key = nil; |
| fmtinstall('B', mpfmt); |
| |
| ARGBEGIN{ |
| case 'b': |
| bits = atoi(EARGF(usage())); |
| if(bits == 0) |
| usage(); |
| break; |
| case 't': |
| tag = EARGF(usage()); |
| break; |
| default: |
| usage(); |
| }ARGEND |
| |
| if(argc != 0) |
| usage(); |
| |
| do{ |
| if(key) |
| rsaprivfree(key); |
| key = rsagen(bits, 6, 0); |
| }while(mpsignif(key->pub.n) != bits); |
| |
| 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", |
| tag ? tag : "", tag ? " " : "", |
| mpsignif(key->pub.n), key->pub.ek, |
| key->dk, key->pub.n, key->p, key->q, |
| key->kp, key->kq, key->c2); |
| if(s == nil) |
| sysfatal("smprint: %r"); |
| |
| if(write(1, s, strlen(s)) != strlen(s)) |
| sysfatal("write: %r"); |
| |
| exits(nil); |
| } |