rend_test_helpers.c 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* Copyright (c) 2014-2017, The Tor Project, Inc. */
  2. /* See LICENSE for licensing information */
  3. #include "or.h"
  4. #include "crypto_rand.h"
  5. #include "test.h"
  6. #include "rendcommon.h"
  7. #include "rend_test_helpers.h"
  8. #include "rend_service_descriptor_st.h"
  9. void
  10. generate_desc(int time_diff, rend_encoded_v2_service_descriptor_t **desc,
  11. char **service_id, int intro_points)
  12. {
  13. rend_service_descriptor_t *generated = NULL;
  14. smartlist_t *descs = smartlist_new();
  15. time_t now;
  16. now = time(NULL) + time_diff;
  17. create_descriptor(&generated, service_id, intro_points);
  18. generated->timestamp = now;
  19. rend_encode_v2_descriptors(descs, generated, now, 0, REND_NO_AUTH, NULL,
  20. NULL);
  21. tor_assert(smartlist_len(descs) > 1);
  22. *desc = smartlist_get(descs, 0);
  23. smartlist_set(descs, 0, NULL);
  24. SMARTLIST_FOREACH(descs, rend_encoded_v2_service_descriptor_t *, d,
  25. rend_encoded_v2_service_descriptor_free(d));
  26. smartlist_free(descs);
  27. rend_service_descriptor_free(generated);
  28. }
  29. void
  30. create_descriptor(rend_service_descriptor_t **generated, char **service_id,
  31. int intro_points)
  32. {
  33. crypto_pk_t *pk1 = NULL;
  34. crypto_pk_t *pk2 = NULL;
  35. int i;
  36. *service_id = tor_malloc(REND_SERVICE_ID_LEN_BASE32+1);
  37. pk1 = pk_generate(0);
  38. pk2 = pk_generate(1);
  39. *generated = tor_malloc_zero(sizeof(rend_service_descriptor_t));
  40. (*generated)->pk = crypto_pk_dup_key(pk1);
  41. rend_get_service_id((*generated)->pk, *service_id);
  42. (*generated)->version = 2;
  43. (*generated)->protocols = 42;
  44. (*generated)->intro_nodes = smartlist_new();
  45. for (i = 0; i < intro_points; i++) {
  46. rend_intro_point_t *intro = tor_malloc_zero(sizeof(rend_intro_point_t));
  47. crypto_pk_t *okey = pk_generate(2 + i);
  48. intro->extend_info = tor_malloc_zero(sizeof(extend_info_t));
  49. intro->extend_info->onion_key = okey;
  50. crypto_pk_get_digest(intro->extend_info->onion_key,
  51. intro->extend_info->identity_digest);
  52. intro->extend_info->nickname[0] = '$';
  53. base16_encode(intro->extend_info->nickname + 1,
  54. sizeof(intro->extend_info->nickname) - 1,
  55. intro->extend_info->identity_digest, DIGEST_LEN);
  56. tor_addr_from_ipv4h(&intro->extend_info->addr, crypto_rand_int(65536));
  57. intro->extend_info->port = 1 + crypto_rand_int(65535);
  58. intro->intro_key = crypto_pk_dup_key(pk2);
  59. smartlist_add((*generated)->intro_nodes, intro);
  60. }
  61. crypto_pk_free(pk1);
  62. crypto_pk_free(pk2);
  63. }
  64. rend_data_t *
  65. mock_rend_data(const char *onion_address)
  66. {
  67. rend_data_v2_t *v2_data = tor_malloc_zero(sizeof(*v2_data));
  68. rend_data_t *rend_query = &v2_data->base_;
  69. rend_query->version = 2;
  70. strlcpy(v2_data->onion_address, onion_address,
  71. sizeof(v2_data->onion_address));
  72. v2_data->auth_type = REND_NO_AUTH;
  73. rend_query->hsdirs_fp = smartlist_new();
  74. smartlist_add(rend_query->hsdirs_fp, tor_memdup("aaaaaaaaaaaaaaaaaaaaaaaa",
  75. DIGEST_LEN));
  76. return rend_query;
  77. }