Exemplo n.º 1
0
    def handle_INF(self, data):
        if self.state not in ("IDENTIFY", "NORMAL"):
            self.status(44, "Invalid state", "FCBINF")
            return

        sid, data = data.split(" ", 1)

        self.inf.update(flag_dict(data))

        # Verify that tiger(PID) == CID.
        if "ID" in self.inf and "PD" in self.inf:
            hashed = b32d(self.inf["ID"])
            unhashed = b32d(self.inf["PD"])
            if tiger.new(unhashed).digest() != hashed:
                self.status(27, "PID does not match CID")
                return

        # If the IP address was not provided, or if it was blank, write down
        # their actual connecting IP.
        if "I4" not in self.inf or self.inf["I4"] == "0.0.0.0":
            self.inf["I4"] = self.addr.host

        # If we weren't identified before, transition to VERIFY and ask for a
        # password.
        if self.state == "IDENTIFY":
            if pass_ip_check(self.addr.host):
                self.enter()
                return

            self.state = "VERIFY"

            self.nonce = rand32(16)
            gpa = "IGPA %s" % self.nonce
            self.sendLine(gpa)
Exemplo n.º 2
0
 def test_b32d_as(self):
     i = "AAAAAAAA"
     o = "\x00" * 5
     self.assertEqual(b32d(i), o)
Exemplo n.º 3
0
 def test_b32d_as_short(self):
     i = "AAAAAAA"
     o = "\x00" * 4
     self.assertEqual(b32d(i), o)
Exemplo n.º 4
0
 def test_b32d_as(self):
     i = "AAAAAAAA"
     o = "\x00" * 5
     self.assertEqual(b32d(i), o)
Exemplo n.º 5
0
 def test_b32d_as_short(self):
     i = "AAAAAAA"
     o = "\x00" * 4
     self.assertEqual(b32d(i), o)
Exemplo n.º 6
0
def hash_password(password, nonce):
    return b32e(tiger.new(password + b32d(nonce)).digest())