aboutsummaryrefslogtreecommitdiff
path: root/src/or/onion_fast.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2014-10-16 13:26:42 -0400
committerNick Mathewson <nickm@torproject.org>2014-10-16 13:26:42 -0400
commitfb91d647acdf0560fc7479d72eeea52e4e6ff41d (patch)
tree500121c7c6c5b1b2cf3ee27d85f4cec6651853c6 /src/or/onion_fast.c
parentab4b29625db720817f9af502199ebf1ee3ac5af7 (diff)
downloadtor-fb91d647acdf0560fc7479d72eeea52e4e6ff41d.tar.gz
tor-fb91d647acdf0560fc7479d72eeea52e4e6ff41d.zip
Downgrade 'invalid result from curve25519 handshake: 4' warning
Also, refactor the way we handle failed handshakes so that this warning doesn't propagate itself to "onion_skin_client_handshake failed" and "circuit_finish_handshake failed" and "connection_edge_process_relay_cell (at origin) failed." Resolves warning from 9635.
Diffstat (limited to 'src/or/onion_fast.c')
-rw-r--r--src/or/onion_fast.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/or/onion_fast.c b/src/or/onion_fast.c
index 38b62decc3..30f60e8e42 100644
--- a/src/or/onion_fast.c
+++ b/src/or/onion_fast.c
@@ -92,7 +92,8 @@ int
fast_client_handshake(const fast_handshake_state_t *handshake_state,
const uint8_t *handshake_reply_out,/*DIGEST_LEN*2 bytes*/
uint8_t *key_out,
- size_t key_out_len)
+ size_t key_out_len,
+ const char **msg_out)
{
uint8_t tmp[DIGEST_LEN+DIGEST_LEN];
uint8_t *out;
@@ -104,13 +105,14 @@ fast_client_handshake(const fast_handshake_state_t *handshake_state,
out_len = key_out_len+DIGEST_LEN;
out = tor_malloc(out_len);
if (crypto_expand_key_material_TAP(tmp, sizeof(tmp), out, out_len)) {
- log_warn(LD_CIRC, "Failed to expand key material");
+ if (msg_out)
+ *msg_out = "Failed to expand key material";
goto done;
}
if (tor_memneq(out, handshake_reply_out+DIGEST_LEN, DIGEST_LEN)) {
/* H(K) does *not* match. Something fishy. */
- log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on fast handshake. "
- "Bug or attack.");
+ if (msg_out)
+ *msg_out = "Digest DOES NOT MATCH on fast handshake. Bug or attack.";
goto done;
}
memcpy(key_out, out+DIGEST_LEN, key_out_len);