def decodeProxyMessage(self, msg): self.msg = msg self.reqid, seqByte, flagBytes, self.data = splitFields( msg, [REQID_LENGTH, SEQ_LENGTH, FLAGS_LENGTH], True) self.seq = decodeSeq(seqByte) self.flags = decodeFlags(flagBytes) self.fin = self.flags[0]
def decodeOnionPacket(self, keypair, packet): self.sender, self.receiver, packet = splitFields( packet, [SENDER_LENGTH, RECEIVER_LENGTH]) if keypair.public.bytes != self.receiver: print( 'Error! Onion packet meant for a different receiver. Keypair does not match: ' + encode(self.sender) + ' ' + encode(self.receiver) + ' ' + encode(keypair.public.bytes)) return else: skb = keypair.createSessionBytes(self.sender) self.decodeDataPacket(skb, packet)
def getBytes(self, n): if v3: result=bytes('', 'ascii') else: result='' while len(result)<n: if self.pers: b=skein512(self.seed, pers=self.pers, digest_bits=512) else: b=skein512(self.seed, digest_bits=512) self.seed, r=splitFields(b, [SEED_SIZE]) result=result+r return result[:n]
def getBytes(self, n): if v3: result = bytes('', 'ascii') else: result = '' while len(result) < n: if self.pers: b = skein512(self.seed, pers=self.pers, digest_bits=512) else: b = skein512(self.seed, digest_bits=512) self.seed, r = splitFields(b, [SEED_SIZE]) result = result + r return result[:n]
def decodeOnionPacket(self, keypair, packet): self.sender, self.receiver, packet = splitFields(packet, [SENDER_LENGTH, RECEIVER_LENGTH]) if keypair.public.bytes != self.receiver: print( "Error! Onion packet meant for a different receiver. Keypair does not match: " + encode(self.sender) + " " + encode(self.receiver) + " " + encode(keypair.public.bytes) ) return else: skb = keypair.createSessionBytes(self.sender) self.decodeDataPacket(skb, packet)
def decodeInviteMessage(self, message): self.message=message #print('decodeInviteMessage('+encode(message)+')'+str(len(message))) pubkey, flags, ip, port, id, secret=splitFields(self.message, [PUBKEY_LENGTH, FLAGS_LENGTH, IP_LENGTH, PORT_LENGTH, ID_LENGTH, SECRET_LENGTH]) self.pubkey=Key(pubkey, False) flags=decodeFlags(flags) self.v6=flags[0] self.tcp=flags[1] if self.v6: self.ip=inet_ntop(AF_INET6, ip) else: ip=ip[:IPV4_LENGTH] self.ip=inet_ntop(AF_INET, ip) self.port=struct.unpack("H", port)[0] self.id=id self.secret=secret
def decodeInviteMessage(self, message): self.message = message #print('decodeInviteMessage('+encode(message)+')'+str(len(message))) pubkey, flags, ip, port, id, secret = splitFields( self.message, [ PUBKEY_LENGTH, FLAGS_LENGTH, IP_LENGTH, PORT_LENGTH, ID_LENGTH, SECRET_LENGTH ]) self.pubkey = Key(pubkey, False) flags = decodeFlags(flags) self.v6 = flags[0] self.tcp = flags[1] if self.v6: self.ip = inet_ntop(AF_INET6, ip) else: ip = ip[:IPV4_LENGTH] self.ip = inet_ntop(AF_INET, ip) self.port = struct.unpack("H", port)[0] self.id = id self.secret = secret
def decodeDustPacket(self, key, packet): self.key=key self.packet=packet self.mac, self.ciphertext=splitField(self.packet, MAC_SIZE) self.iv, self.encrypted=splitField(self.ciphertext, IV_SIZE) self.payload=decrypt(self.key, self.iv, self.encrypted) self.timestamp, self.dataLength, self.paddingLength, self.data=splitFields(self.payload, [TIMESTAMP_SIZE, DATA_LENGTH_SIZE, PADDING_LENGTH_SIZE]) self.timestamp=struct.unpack("I", self.timestamp)[0] self.dataLength=struct.unpack("H", self.dataLength)[0] self.paddingLength=struct.unpack("B", self.paddingLength)[0] self.data, extra=splitField(self.data, self.dataLength) payloadLength=TIMESTAMP_SIZE+DATA_LENGTH_SIZE+PADDING_LENGTH_SIZE+len(self.data) self.payload=self.payload[:payloadLength] ciphertextLength=IV_SIZE+payloadLength self.ciphertext=self.ciphertext[:ciphertextLength] realPacketLength=MAC_SIZE+ciphertextLength+self.paddingLength if len(packet)>realPacketLength: self.remaining=packet[realPacketLength:]
def decodeProxyMessage(self, msg): self.msg=msg self.reqid, seqByte, flagBytes, self.data=splitFields(msg, [REQID_LENGTH, SEQ_LENGTH, FLAGS_LENGTH], True) self.seq=decodeSeq(seqByte) self.flags=decodeFlags(flagBytes) self.fin=self.flags[0]
def decodeProxyMessage(self, msg): self.msg=msg self.reqid, self.data=splitFields(msg, [REQID_LENGTH])