Beispiel #1
0
 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]
Beispiel #2
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)
Beispiel #3
0
 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]
Beispiel #4
0
 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]
Beispiel #5
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)
Beispiel #6
0
  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
Beispiel #7
0
    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
Beispiel #8
0
  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 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:]
Beispiel #10
0
 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])