aboutsummaryrefslogtreecommitdiff
path: root/src/test/test_sendme.c
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2019-05-07 09:16:39 -0400
committerNick Mathewson <nickm@torproject.org>2019-05-22 11:47:20 -0400
commit59b9eecc19877f38b2c9d8b4f7964c6e9875f4c0 (patch)
tree0d993ae7bbf40127fc9779053802df558ecb339d /src/test/test_sendme.c
parentd71fa707dd01bdaa2ed301e82ace6fd23f63e638 (diff)
downloadtor-59b9eecc19877f38b2c9d8b4f7964c6e9875f4c0.tar.gz
tor-59b9eecc19877f38b2c9d8b4f7964c6e9875f4c0.zip
sendme: Record cell digest on both client and exit
It turns out that only the exit side is validating the authenticated SENDME v1 logic and never the client side. Which means that if a client ever uploaded data towards an exit, the authenticated SENDME logic wouldn't apply. For this to work, we have to record the cell digest client side as well which introduced a new function that supports both type of edges. This also removes a test that is not valid anymore which was that we didn't allow cell recording on an origin circuit (client). Part of #30428 Signed-off-by: David Goulet <dgoulet@torproject.org>
Diffstat (limited to 'src/test/test_sendme.c')
-rw-r--r--src/test/test_sendme.c28
1 files changed, 7 insertions, 21 deletions
diff --git a/src/test/test_sendme.c b/src/test/test_sendme.c
index d40fbaf862..463a0ec086 100644
--- a/src/test/test_sendme.c
+++ b/src/test/test_sendme.c
@@ -46,26 +46,12 @@ static void
test_v1_record_digest(void *arg)
{
or_circuit_t *or_circ = NULL;
- origin_circuit_t *orig_circ = NULL;
circuit_t *circ = NULL;
(void) arg;
- /* Create our dummy circuits. */
- orig_circ = origin_circuit_new();
- tt_assert(orig_circ);
+ /* Create our dummy circuit. */
or_circ = or_circuit_new(1, NULL);
-
- /* Start by pointing to the origin circuit. */
- circ = TO_CIRCUIT(orig_circ);
- circ->purpose = CIRCUIT_PURPOSE_S_REND_JOINED;
-
- /* We should never note SENDME digest on origin circuit. */
- sendme_record_cell_digest(circ);
- tt_assert(!circ->sendme_last_digests);
- /* We do not need the origin circuit for now. */
- orig_circ = NULL;
- circuit_free_(circ);
/* Points it to the OR circuit now. */
circ = TO_CIRCUIT(or_circ);
@@ -73,23 +59,23 @@ test_v1_record_digest(void *arg)
* in order to catched the CIRCWINDOW_INCREMENT-nth cell. Try something that
* shouldn't be noted. */
circ->package_window = CIRCWINDOW_INCREMENT;
- sendme_record_cell_digest(circ);
+ sendme_record_cell_digest_on_circ(circ, NULL);
tt_assert(!circ->sendme_last_digests);
/* This should work now. Package window at CIRCWINDOW_INCREMENT + 1. */
circ->package_window++;
- sendme_record_cell_digest(circ);
+ sendme_record_cell_digest_on_circ(circ, NULL);
tt_assert(circ->sendme_last_digests);
tt_int_op(smartlist_len(circ->sendme_last_digests), OP_EQ, 1);
/* Next cell in the package window shouldn't do anything. */
circ->package_window++;
- sendme_record_cell_digest(circ);
+ sendme_record_cell_digest_on_circ(circ, NULL);
tt_int_op(smartlist_len(circ->sendme_last_digests), OP_EQ, 1);
/* The next CIRCWINDOW_INCREMENT should add one more digest. */
circ->package_window = (CIRCWINDOW_INCREMENT * 2) + 1;
- sendme_record_cell_digest(circ);
+ sendme_record_cell_digest_on_circ(circ, NULL);
tt_int_op(smartlist_len(circ->sendme_last_digests), OP_EQ, 2);
done:
@@ -188,7 +174,7 @@ test_v1_build_cell(void *arg)
/* Note the wrong digest in the circuit, cell should fail validation. */
circ->package_window = CIRCWINDOW_INCREMENT + 1;
- sendme_record_cell_digest(circ);
+ sendme_record_cell_digest_on_circ(circ, NULL);
tt_int_op(smartlist_len(circ->sendme_last_digests), OP_EQ, 1);
setup_full_capture_of_logs(LOG_INFO);
tt_int_op(sendme_is_valid(circ, payload, sizeof(payload)), OP_EQ, false);
@@ -200,7 +186,7 @@ test_v1_build_cell(void *arg)
/* Record the cell digest into the circuit, cell should validate. */
memcpy(or_circ->crypto.sendme_digest, digest, sizeof(digest));
circ->package_window = CIRCWINDOW_INCREMENT + 1;
- sendme_record_cell_digest(circ);
+ sendme_record_cell_digest_on_circ(circ, NULL);
tt_int_op(smartlist_len(circ->sendme_last_digests), OP_EQ, 1);
tt_int_op(sendme_is_valid(circ, payload, sizeof(payload)), OP_EQ, true);
/* After a validation, the last digests is always popped out. */