box6.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include <string>
  2. using std::string;
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include "crypto_box.h"
  6. #include "randombytes.h"
  7. main()
  8. {
  9. int mlen;
  10. for (mlen = 0;mlen < 1000;++mlen) {
  11. string alicesk;
  12. string alicepk = crypto_box_keypair(&alicesk);
  13. string bobsk;
  14. string bobpk = crypto_box_keypair(&bobsk);
  15. unsigned char nbytes[crypto_box_NONCEBYTES];
  16. randombytes(nbytes,crypto_box_NONCEBYTES);
  17. string n((char *) nbytes,crypto_box_NONCEBYTES);
  18. unsigned char mbytes[mlen];
  19. randombytes(mbytes,mlen);
  20. string m((char *) mbytes,mlen);
  21. string c = crypto_box(m,n,bobpk,alicesk);
  22. int caught = 0;
  23. while (caught < 10) {
  24. c.replace(random() % c.size(),1,1,random());
  25. try {
  26. string m2 = crypto_box_open(c,n,alicepk,bobsk);
  27. if (m != m2) {
  28. printf("forgery\n");
  29. return 100;
  30. }
  31. } catch(const char *s) {
  32. if (string(s) == string("ciphertext fails verification"))
  33. ++caught;
  34. else {
  35. printf("%s\n",s);
  36. return 111;
  37. }
  38. }
  39. }
  40. }
  41. return 0;
  42. }