- A7F781100F32373DF224F187126FCC44DCFB4B4A8BB53E60E1ACAFDCFF0A9CFD71D47F40E50C6C6F3F7C92A5EB4821B8EEC22ECAC01A84AA1E7F67204A9A220E
+ F6B26AA5D1367C471975FF5E943315E7136AB40D21C7A329E030A2CFFFC06B4E8C3C143844560DB05B9233087617D571B0D460F0C4FF63E61AFC58D79FD4A986
blatta/lib/infosec.py
(1 . 12)(1 . 12)
109 import hashlib
110 import lib.serpent
111 from lib.serpent import Serpent
112 from lib.serpent import serpent_cbc_encrypt
113 from lib.serpent import serpent_cbc_decrypt
114 import serpent
115 from serpent import Serpent
116 from serpent import serpent_cbc_encrypt
117 from serpent import serpent_cbc_decrypt
118 from commands import BROADCAST
119 from commands import DIRECT
120 from commands import IGNORE
121 from lib.message import Message
122 from message import Message
123 import base64
124 import binascii
125 import time
(33 . 12)(33 . 17)
127 MALFORMED_PACKET = 2
128 INVALID_SIGNATURE = 3
129 IGNORED = 4
130 MESSAGE_LOGGING_FORMAT = "[%s:%d %s] <- %s %s %s"
131
132 class Infosec(object):
133 def __init__(self, state=None):
134 self.state = state
135
136 def message(self, message):
137 if not message.speaker:
138 logging.error("aborting message send due speaker not being set")
139 return
140
141 # if we are not rebroadcasting we need to set the timestamp
142 if message.timestamp == None:
143 message.original = True
(63 . 8)(68 . 9)
145 else:
146 message_bytes = message.message_bytes
147
148 message_hash = binascii.hexlify(hashlib.sha256(message_bytes).digest())
149
150 if message.command != IGNORE:
151 message_hash = binascii.hexlify(hashlib.sha256(message_bytes).digest())
152 logging.debug("generated message_hash: %s" % message_hash)
153 self.state.add_to_dedup_queue(message_hash)
154 self.state.log(message.speaker, message_bytes, target_peer)
(72 . 10)(78 . 17)
156 if message.command == DIRECT:
157 signed_packet_bytes = self.pack(target_peer, message, message_bytes)
158 target_peer.send(signed_packet_bytes)
159 logging.info(MESSAGE_LOGGING_FORMAT % (target_peer.address,
160 target_peer.port,
161 target_peer.handles[0],
162 message.body,
163 message.bounces,
164 message_hash))
165
166 elif message.command == BROADCAST or message.command == IGNORE:
167 # sanity check
168 if message.message_bytes and message_bytes != message_bytes:
169 logging.debug("aborting send: message modified by station!")
170 logging.error("aborting send: message modified by station!")
171 return
172
173 for peer in self.state.get_keyed_peers():
(86 . 8)(99 . 13)
175
176 signed_packet_bytes = self.pack(peer, message, message_bytes)
177 peer.send(signed_packet_bytes)
178 else:
179 pass
180 if message.command != IGNORE:
181 logging.info(MESSAGE_LOGGING_FORMAT % (peer.address,
182 peer.port,
183 peer.handles[0],
184 message.body,
185 message.bounces,
186 message_hash))
187
188 def get_message_bytes(self, message, peer=None):
189 timestamp = message.timestamp