secretbox6.cpp 1.1 KB

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