URI:
       tasn12rsa.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tasn12rsa.c (1206B)
       ---
            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 
           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",
           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 }