rsatest.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "os.h"
  2. #include <mp.h>
  3. #include <libsec.h>
  4. #include <bio.h>
  5. void
  6. main(void)
  7. {
  8. int n;
  9. vlong start;
  10. char *p;
  11. uchar buf[4096];
  12. Biobuf b;
  13. RSApriv *rsa;
  14. mpint *clr, *enc, *clr2;
  15. fmtinstall('B', mpfmt);
  16. rsa = rsagen(1024, 16, 0);
  17. if(rsa == nil)
  18. sysfatal("rsagen");
  19. Binit(&b, 0, OREAD);
  20. clr = mpnew(0);
  21. clr2 = mpnew(0);
  22. enc = mpnew(0);
  23. strtomp("123456789abcdef123456789abcdef123456789abcdef123456789abcdef", nil, 16, clr);
  24. rsaencrypt(&rsa->pub, clr, enc);
  25. start = nsec();
  26. for(n = 0; n < 10; n++)
  27. rsadecrypt(rsa, enc, clr);
  28. print("%lld\n", nsec()-start);
  29. start = nsec();
  30. for(n = 0; n < 10; n++)
  31. mpexp(enc, rsa->dk, rsa->pub.n, clr2);
  32. print("%lld\n", nsec()-start);
  33. if(mpcmp(clr, clr2) != 0)
  34. print("%B != %B\n", clr, clr2);
  35. print("> ");
  36. while(p = Brdline(&b, '\n')){
  37. n = Blinelen(&b);
  38. letomp((uchar*)p, n, clr);
  39. print("clr %B\n", clr);
  40. rsaencrypt(&rsa->pub, clr, enc);
  41. print("enc %B\n", enc);
  42. rsadecrypt(rsa, enc, clr);
  43. print("clr %B\n", clr);
  44. n = mptole(clr, buf, sizeof(buf), nil);
  45. write(1, buf, n);
  46. print("> ");
  47. }
  48. }