fuzz_hsdescv3.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* Copyright (c) 2017, The Tor Project, Inc. */
  2. /* See LICENSE for licensing information */
  3. #define ROUTERPARSE_PRIVATE
  4. #define HS_DESCRIPTOR_PRIVATE
  5. #include "crypto_ed25519.h"
  6. #include "hs_descriptor.h"
  7. #include "routerparse.h"
  8. #include "util.h"
  9. #include "torcert.h"
  10. #include "fuzzing.h"
  11. static void
  12. mock_dump_desc__nodump(const char *desc, const char *type)
  13. {
  14. (void)desc;
  15. (void)type;
  16. }
  17. static int
  18. mock_rsa_ed25519_crosscert_check(const uint8_t *crosscert,
  19. const size_t crosscert_len,
  20. const crypto_pk_t *rsa_id_key,
  21. const ed25519_public_key_t *master_key,
  22. const time_t reject_if_expired_before)
  23. {
  24. (void) crosscert;
  25. (void) crosscert_len;
  26. (void) rsa_id_key;
  27. (void) master_key;
  28. (void) reject_if_expired_before;
  29. return 0;
  30. }
  31. int
  32. fuzz_init(void)
  33. {
  34. disable_signature_checking();
  35. MOCK(dump_desc, mock_dump_desc__nodump);
  36. MOCK(rsa_ed25519_crosscert_check, mock_rsa_ed25519_crosscert_check);
  37. ed25519_init();
  38. return 0;
  39. }
  40. int
  41. fuzz_cleanup(void)
  42. {
  43. return 0;
  44. }
  45. int
  46. fuzz_main(const uint8_t *data, size_t sz)
  47. {
  48. hs_descriptor_t *desc = NULL;
  49. char *fuzzing_data = tor_memdup_nulterm(data, sz);
  50. hs_desc_decode_descriptor(fuzzing_data, NULL, &desc);
  51. if (desc) {
  52. log_debug(LD_GENERAL, "Decoding okay");
  53. hs_descriptor_free(desc);
  54. } else {
  55. log_debug(LD_GENERAL, "Decoding failed");
  56. }
  57. tor_free(fuzzing_data);
  58. return 0;
  59. }