예제 #1
0
    def test_id_collision(self):
        # test replacement case where tubid equals a keyid (one should
        # not replace the other)
        i = IntroducerService()
        ic = IntroducerClient(None, "introducer.furl", u"my_nickname",
                              "my_version", "oldest_version", {})
        sk_s, vk_s = keyutil.make_keypair()
        sk, _ignored = keyutil.parse_privkey(sk_s)
        keyid = keyutil.remove_prefix(vk_s, "pub-v0-")
        furl1 = "pb://[email protected]:123/short"  # base32("short")
        ann_t = ic.create_announcement("storage", make_ann(furl1), sk)
        i.remote_publish_v2(ann_t, Referenceable())
        announcements = i.get_announcements()
        self.failUnlessEqual(len(announcements), 1)
        key1 = ("storage", "v0-" + keyid, None)
        self.failUnlessEqual(announcements[0].index, key1)
        ann1_out = announcements[0].announcement
        self.failUnlessEqual(ann1_out["anonymous-storage-FURL"], furl1)

        furl2 = "pb://%[email protected]:36106/swissnum" % keyid
        ann2 = (furl2, "storage", "RIStorage", "nick1", "ver23", "ver0")
        i.remote_publish(ann2)
        announcements = i.get_announcements()
        self.failUnlessEqual(len(announcements), 2)
        key2 = ("storage", None, keyid)
        wanted = [ad for ad in announcements if ad.index == key2]
        self.failUnlessEqual(len(wanted), 1)
        ann2_out = wanted[0].announcement
        self.failUnlessEqual(ann2_out["anonymous-storage-FURL"], furl2)
예제 #2
0
    def test_id_collision(self):
        # test replacement case where tubid equals a keyid (one should
        # not replace the other)
        i = IntroducerService()
        ic = IntroducerClient(None,
                              "introducer.furl", u"my_nickname",
                              "my_version", "oldest_version", {})
        sk_s, vk_s = keyutil.make_keypair()
        sk, _ignored = keyutil.parse_privkey(sk_s)
        keyid = keyutil.remove_prefix(vk_s, "pub-v0-")
        furl1 = "pb://[email protected]:123/short" # base32("short")
        ann_t = ic.create_announcement("storage", make_ann(furl1), sk)
        i.remote_publish_v2(ann_t, Referenceable())
        announcements = i.get_announcements()
        self.failUnlessEqual(len(announcements), 1)
        key1 = ("storage", "v0-"+keyid, None)
        self.failUnlessEqual(announcements[0].index, key1)
        ann1_out = announcements[0].announcement
        self.failUnlessEqual(ann1_out["anonymous-storage-FURL"], furl1)

        furl2 = "pb://%[email protected]:36106/swissnum" % keyid
        ann2 = (furl2, "storage", "RIStorage", "nick1", "ver23", "ver0")
        i.remote_publish(ann2)
        announcements = i.get_announcements()
        self.failUnlessEqual(len(announcements), 2)
        key2 = ("storage", None, keyid)
        wanted = [ad for ad in announcements if ad.index == key2]
        self.failUnlessEqual(len(wanted), 1)
        ann2_out = wanted[0].announcement
        self.failUnlessEqual(ann2_out["anonymous-storage-FURL"], furl2)
예제 #3
0
    def test_client_v2_signed(self):
        introducer = IntroducerService()
        tub = introducer_furl = None
        app_versions = {"whizzy": "fizzy"}
        client_v2 = IntroducerClient(tub, introducer_furl, u"nick-v2",
                                     "my_version", "oldest", app_versions,
                                     fakeseq, FilePath(self.mktemp()))
        furl1 = "pb://[email protected]:0/swissnum"

        private_key, public_key = ed25519.create_signing_keypair()
        public_key_str = remove_prefix(
            ed25519.string_from_verifying_key(public_key), "pub-")

        ann_t0 = make_ann_t(client_v2, furl1, private_key, 10)
        canary0 = Referenceable()
        introducer.remote_publish_v2(ann_t0, canary0)
        a = introducer.get_announcements()
        self.failUnlessEqual(len(a), 1)
        self.assertThat(a[0].canary, Is(canary0))
        self.failUnlessEqual(a[0].index, ("storage", public_key_str))
        self.failUnlessEqual(a[0].announcement["app-versions"], app_versions)
        self.failUnlessEqual(a[0].nickname, u"nick-v2")
        self.failUnlessEqual(a[0].service_name, "storage")
        self.failUnlessEqual(a[0].version, "my_version")
        self.failUnlessEqual(a[0].announcement["anonymous-storage-FURL"],
                             furl1)
예제 #4
0
 def test_duplicate(self):
     i = IntroducerService()
     self.failUnlessEqual(len(i.get_announcements()), 0)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
     furl1 = "pb://[email protected]:36106,127.0.0.1:36106/gydnpigj2ja2qr2srq4ikjwnl7xfgbra"
     furl2 = "pb://[email protected]:36111,127.0.0.1:36106/ttwwoogj2ja2qr2srq4ikjwnl7xfgbra"
     ann1 = (furl1, "storage", "RIStorage", "nick1", "ver23", "ver0")
     ann1b = (furl1, "storage", "RIStorage", "nick1", "ver24", "ver0")
     ann2 = (furl2, "storage", "RIStorage", "nick2", "ver30", "ver0")
     i.remote_publish(ann1)
     self.failUnlessEqual(len(i.get_announcements()), 1)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
     i.remote_publish(ann2)
     self.failUnlessEqual(len(i.get_announcements()), 2)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
     i.remote_publish(ann1b)
     self.failUnlessEqual(len(i.get_announcements()), 2)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
예제 #5
0
 def test_duplicate(self):
     i = IntroducerService()
     self.failUnlessEqual(len(i.get_announcements()), 0)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
     furl1 = "pb://[email protected]:36106,127.0.0.1:36106/gydnpigj2ja2qr2srq4ikjwnl7xfgbra"
     furl2 = "pb://[email protected]:36111,127.0.0.1:36106/ttwwoogj2ja2qr2srq4ikjwnl7xfgbra"
     ann1 = (furl1, "storage", "RIStorage", "nick1", "ver23", "ver0")
     ann1b = (furl1, "storage", "RIStorage", "nick1", "ver24", "ver0")
     ann2 = (furl2, "storage", "RIStorage", "nick2", "ver30", "ver0")
     i.remote_publish(ann1)
     self.failUnlessEqual(len(i.get_announcements()), 1)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
     i.remote_publish(ann2)
     self.failUnlessEqual(len(i.get_announcements()), 2)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
     i.remote_publish(ann1b)
     self.failUnlessEqual(len(i.get_announcements()), 2)
     self.failUnlessEqual(len(i.get_subscribers()), 0)
예제 #6
0
    def test_client_v1(self):
        introducer = IntroducerService()

        furl1 = "pb://[email protected]:0/swissnum"
        tubid = "62ubehyunnyhzs7r6vdonnm2hpi52w6y"
        ann = (furl1, "storage", "RIStorage",
               u"nick-v1".encode("utf-8"), "my_version", "oldest")
        introducer.remote_publish(ann)

        a = introducer.get_announcements()
        self.failUnlessEqual(len(a), 1)
        self.failUnlessEqual(a[0].index, ("storage", None, tubid))
        self.failUnlessEqual(a[0].canary, None)
        self.failUnlessEqual(a[0].announcement["app-versions"], {})
        self.failUnlessEqual(a[0].nickname, u"nick-v1".encode("utf-8"))
        self.failUnlessEqual(a[0].service_name, "storage")
        self.failUnlessEqual(a[0].version, "my_version")
        self.failUnlessEqual(a[0].announcement["anonymous-storage-FURL"], furl1)
예제 #7
0
    def test_client_v1(self):
        introducer = IntroducerService()

        furl1 = "pb://[email protected]:0/swissnum"
        tubid = "62ubehyunnyhzs7r6vdonnm2hpi52w6y"
        ann = (furl1, "storage", "RIStorage", u"nick-v1".encode("utf-8"),
               "my_version", "oldest")
        introducer.remote_publish(ann)

        a = introducer.get_announcements()
        self.failUnlessEqual(len(a), 1)
        self.failUnlessEqual(a[0].index, ("storage", None, tubid))
        self.failUnlessEqual(a[0].canary, None)
        self.failUnlessEqual(a[0].announcement["app-versions"], {})
        self.failUnlessEqual(a[0].nickname, u"nick-v1".encode("utf-8"))
        self.failUnlessEqual(a[0].service_name, "storage")
        self.failUnlessEqual(a[0].version, "my_version")
        self.failUnlessEqual(a[0].announcement["anonymous-storage-FURL"],
                             furl1)
예제 #8
0
 def test_client_v2_unsigned(self):
     introducer = IntroducerService()
     tub = introducer_furl = None
     app_versions = {"whizzy": "fizzy"}
     client_v2 = IntroducerClient(tub, introducer_furl, u"nick-v2",
                                  "my_version", "oldest", app_versions)
     furl1 = "pb://[email protected]:0/swissnum"
     tubid = "62ubehyunnyhzs7r6vdonnm2hpi52w6y"
     ann_s0 = make_ann_t(client_v2, furl1, None)
     canary0 = Referenceable()
     introducer.remote_publish_v2(ann_s0, canary0)
     a = introducer.get_announcements()
     self.failUnlessEqual(len(a), 1)
     self.failUnlessIdentical(a[0].canary, canary0)
     self.failUnlessEqual(a[0].index, ("storage", None, tubid))
     self.failUnlessEqual(a[0].announcement["app-versions"], app_versions)
     self.failUnlessEqual(a[0].nickname, u"nick-v2")
     self.failUnlessEqual(a[0].service_name, "storage")
     self.failUnlessEqual(a[0].version, "my_version")
     self.failUnlessEqual(a[0].announcement["anonymous-storage-FURL"], furl1)
예제 #9
0
 def test_client_v2_unsigned(self):
     introducer = IntroducerService()
     tub = introducer_furl = None
     app_versions = {"whizzy": "fizzy"}
     client_v2 = IntroducerClient(tub, introducer_furl, u"nick-v2",
                                  "my_version", "oldest", app_versions)
     furl1 = "pb://[email protected]:0/swissnum"
     tubid = "62ubehyunnyhzs7r6vdonnm2hpi52w6y"
     ann_s0 = make_ann_t(client_v2, furl1, None, 10.0)
     canary0 = Referenceable()
     introducer.remote_publish_v2(ann_s0, canary0)
     a = introducer.get_announcements()
     self.failUnlessEqual(len(a), 1)
     self.failUnlessIdentical(a[0].canary, canary0)
     self.failUnlessEqual(a[0].index, ("storage", None, tubid))
     self.failUnlessEqual(a[0].announcement["app-versions"], app_versions)
     self.failUnlessEqual(a[0].nickname, u"nick-v2")
     self.failUnlessEqual(a[0].service_name, "storage")
     self.failUnlessEqual(a[0].version, "my_version")
     self.failUnlessEqual(a[0].announcement["anonymous-storage-FURL"],
                          furl1)
예제 #10
0
 def test_client_v2_signed(self):
     introducer = IntroducerService()
     tub = introducer_furl = None
     app_versions = {"whizzy": "fizzy"}
     client_v2 = IntroducerClient(tub, introducer_furl, u"nick-v2",
                                  "my_version", "oldest", app_versions)
     furl1 = "pb://[email protected]:0/swissnum"
     sk_s, vk_s = keyutil.make_keypair()
     sk, _ignored = keyutil.parse_privkey(sk_s)
     pks = keyutil.remove_prefix(vk_s, "pub-")
     ann_t0 = make_ann_t(client_v2, furl1, sk)
     canary0 = Referenceable()
     introducer.remote_publish_v2(ann_t0, canary0)
     a = introducer.get_announcements()
     self.failUnlessEqual(len(a), 1)
     self.failUnlessIdentical(a[0].canary, canary0)
     self.failUnlessEqual(a[0].index, ("storage", pks, None))
     self.failUnlessEqual(a[0].announcement["app-versions"], app_versions)
     self.failUnlessEqual(a[0].nickname, u"nick-v2")
     self.failUnlessEqual(a[0].service_name, "storage")
     self.failUnlessEqual(a[0].version, "my_version")
     self.failUnlessEqual(a[0].announcement["anonymous-storage-FURL"], furl1)
예제 #11
0
 def test_client_v2_signed(self):
     introducer = IntroducerService()
     tub = introducer_furl = None
     app_versions = {"whizzy": "fizzy"}
     client_v2 = IntroducerClient(tub, introducer_furl, u"nick-v2",
                                  "my_version", "oldest", app_versions,
                                  fakeseq, FilePath(self.mktemp()))
     furl1 = "pb://[email protected]:0/swissnum"
     sk_s, vk_s = keyutil.make_keypair()
     sk, _ignored = keyutil.parse_privkey(sk_s)
     pks = keyutil.remove_prefix(vk_s, "pub-")
     ann_t0 = make_ann_t(client_v2, furl1, sk, 10)
     canary0 = Referenceable()
     introducer.remote_publish_v2(ann_t0, canary0)
     a = introducer.get_announcements()
     self.failUnlessEqual(len(a), 1)
     self.failUnlessIdentical(a[0].canary, canary0)
     self.failUnlessEqual(a[0].index, ("storage", pks))
     self.failUnlessEqual(a[0].announcement["app-versions"], app_versions)
     self.failUnlessEqual(a[0].nickname, u"nick-v2")
     self.failUnlessEqual(a[0].service_name, "storage")
     self.failUnlessEqual(a[0].version, "my_version")
     self.failUnlessEqual(a[0].announcement["anonymous-storage-FURL"], furl1)
예제 #12
0
    def test_duplicate(self):
        i = IntroducerService()
        ic1 = IntroducerClient(None,
                               "introducer.furl", u"my_nickname",
                               "ver23", "oldest_version", {}, realseq,
                               FilePath(self.mktemp()))
        furl1 = "pb://[email protected]:36106/gydnp"

        privkey_s, _ = keyutil.make_keypair()
        privkey, _ = keyutil.parse_privkey(privkey_s)

        ann1 = make_ann_t(ic1, furl1, privkey, seqnum=10)
        ann1_old = make_ann_t(ic1, furl1, privkey, seqnum=9)
        ann1_new = make_ann_t(ic1, furl1, privkey, seqnum=11)
        ann1_noseqnum = make_ann_t(ic1, furl1, privkey, seqnum=None)
        ann1_badseqnum = make_ann_t(ic1, furl1, privkey, seqnum="not an int")

        i.remote_publish_v2(ann1, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 10)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 0)

        i.remote_publish_v2(ann1, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 10)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 2)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 0)

        i.remote_publish_v2(ann1_old, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 10)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 3)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 0)

        i.remote_publish_v2(ann1_new, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 11)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 4)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 1)

        i.remote_publish_v2(ann1_noseqnum, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 11)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 5)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 1)

        i.remote_publish_v2(ann1_badseqnum, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 11)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 6)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 2)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 1)
예제 #13
0
    def test_duplicate(self):
        i = IntroducerService()
        ic1 = IntroducerClient(None, "introducer.furl", u"my_nickname",
                               "ver23", "oldest_version", {}, realseq,
                               FilePath(self.mktemp()))
        furl1 = "pb://[email protected]:36106/gydnp"

        privkey_s, _ = keyutil.make_keypair()
        privkey, _ = keyutil.parse_privkey(privkey_s)

        ann1 = make_ann_t(ic1, furl1, privkey, seqnum=10)
        ann1_old = make_ann_t(ic1, furl1, privkey, seqnum=9)
        ann1_new = make_ann_t(ic1, furl1, privkey, seqnum=11)
        ann1_noseqnum = make_ann_t(ic1, furl1, privkey, seqnum=None)
        ann1_badseqnum = make_ann_t(ic1, furl1, privkey, seqnum="not an int")

        i.remote_publish_v2(ann1, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 10)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 0)

        i.remote_publish_v2(ann1, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 10)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 2)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 0)

        i.remote_publish_v2(ann1_old, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 10)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 3)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 0)

        i.remote_publish_v2(ann1_new, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 11)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 4)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 0)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 1)

        i.remote_publish_v2(ann1_noseqnum, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 11)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 5)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 1)

        i.remote_publish_v2(ann1_badseqnum, None)
        all = i.get_announcements()
        self.failUnlessEqual(len(all), 1)
        self.failUnlessEqual(all[0].announcement["seqnum"], 11)
        self.failUnlessEqual(i._debug_counts["inbound_message"], 6)
        self.failUnlessEqual(i._debug_counts["inbound_duplicate"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_no_seqnum"], 2)
        self.failUnlessEqual(i._debug_counts["inbound_old_replay"], 1)
        self.failUnlessEqual(i._debug_counts["inbound_update"], 1)