[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Resume size check for circuit responses
commit 2e51a01c1fa96f24f44b744d37915ef2ffd7762d
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Sat Aug 25 12:39:44 2018 -0700
Resume size check for circuit responses
Maybe this check is redundant with the cell module additions? Not sure.
Regardless, unlike the hamhanded 'relay_cell_size' calculation I did prior
to Dave's branch our LinkProtocol's 'fixed_cell_length' now makes this
check trivial to do upfront.
---
stem/client/__init__.py | 10 +++++++---
stem/client/datatype.py | 5 ++++-
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/stem/client/__init__.py b/stem/client/__init__.py
index 46a82428..a216696a 100644
--- a/stem/client/__init__.py
+++ b/stem/client/__init__.py
@@ -243,16 +243,20 @@ class Circuit(object):
self.forward_digest = forward_digest
self.forward_key = forward_key
+ # Decrypt relay cells received in response. Again, our digest/key only
+ # updates when handled successfully.
+
reply = self.relay._orport.recv()
reply_cells = []
- relay_cell_cmd = stem.client.cell.RelayCell.VALUE
+ if len(reply) % self.relay.link_protocol.fixed_cell_length != 0:
+ raise stem.ProtocolError('Circuit response should be a series of RELAY cells, but received an unexpected size for a response: %i' % len(reply))
while reply:
raw_cell, reply = stem.client.cell.Cell.pop(reply, self.relay.link_protocol)
- if raw_cell.VALUE != relay_cell_cmd:
- raise stem.ProtocolError('RELAY cell responses should be %i but was %i' % (relay_cell_cmd, raw_cell.VALUE))
+ if raw_cell.VALUE != stem.client.cell.RelayCell.VALUE:
+ raise stem.ProtocolError('RELAY cell responses should be %i but was %i' % (stem.client.cell.RelayCell.VALUE, raw_cell.VALUE))
elif raw_cell.circ_id != self.id:
raise stem.ProtocolError('Response should be for circuit id %i, not %i' % (self.id, raw_cell.circ_id))
diff --git a/stem/client/datatype.py b/stem/client/datatype.py
index 43bdfe9d..644d4993 100644
--- a/stem/client/datatype.py
+++ b/stem/client/datatype.py
@@ -116,6 +116,7 @@ import collections
import hashlib
import struct
+import stem.client.cell
import stem.prereq
import stem.util
import stem.util.connection
@@ -246,9 +247,11 @@ class LinkProtocol(int):
protocol = int.__new__(cls, version)
protocol.version = version
protocol.circ_id_size = Size.LONG if version > 3 else Size.SHORT
- protocol.fixed_cell_length = 514 if version > 3 else 512
protocol.first_circ_id = 0x80000000 if version > 3 else 0x01
+ cell_header_size = protocol.circ_id_size.size + 1 # circuit id (2 or 4 bytes) + command (1 byte)
+ protocol.fixed_cell_length = cell_header_size + stem.client.cell.FIXED_PAYLOAD_LEN
+
return protocol
def __hash__(self):
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits