示例#1
0
 def test_verification_of_untrusted_issuer(self):
     audience = "http://example.com"
     issuer = "moz.com"
     # Assertions for @moz.com addresses can come from moz.com
     assertion = make_assertion("*****@*****.**", audience, issuer=issuer)
     self.assertTrue(self.verifier.verify(assertion, audience))
     # But assertions for other addresses cannot.
     assertion = make_assertion("*****@*****.**", audience, issuer=issuer)
     self.assertRaises(InvalidSignatureError, self.verifier.verify, assertion, audience)
示例#2
0
    def test_cache_eviction_during_write(self):
        certs = CertificatesManager(cache_timeout=0.1)
        verifier = LocalVerifier(certs=certs, warning=False)
        # Prime the cache by verifying an assertion.
        assertion1 = make_assertion("*****@*****.**", "", "1.com")
        self.assertTrue(verifier.verify(assertion1))
        self.assertEquals(len(certs.cache), 1)
        # Let that cached key expire
        time.sleep(0.1)
        # Now grab a different key; caching it should purge the expired key.
        assertion2 = make_assertion("*****@*****.**", "", "2.com")
        self.assertTrue(verifier.verify(assertion2))
        self.assertEquals(len(certs.cache), 1)
        # Check that only the second entry is in cache.

        with patched_key_fetching(exc=RuntimeError("key fetch disabled")):
            self.assertTrue(verifier.verify(assertion2))
            self.assertRaises(RuntimeError, verifier.verify, assertion1)
示例#3
0
    def test_cache_eviction_based_on_size(self):
        certs = CertificatesManager(max_size=2)
        verifier = LocalVerifier(certs=certs, warning=False)
        # Prime the cache by verifying some assertions.
        assertion1 = make_assertion("*****@*****.**", "", "1.com")
        self.assertTrue(verifier.verify(assertion1))
        assertion2 = make_assertion("*****@*****.**", "", "2.com")
        self.assertTrue(verifier.verify(assertion2))
        self.assertEquals(len(certs.cache), 2)
        # Hitting a third host should evict the first public key.
        assertion3 = make_assertion("*****@*****.**", "", "3.com")
        self.assertTrue(verifier.verify(assertion3))
        self.assertEquals(len(certs.cache), 2)
        # Make it error out if re-fetching any keys

        with patched_key_fetching(exc=RuntimeError("key fetch disabled")):
            # It should have to re-fetch for 1, but not 2.
            self.assertTrue(verifier.verify(assertion2))
            self.assertRaises(RuntimeError, verifier.verify, assertion1)
示例#4
0
    def test_cache_eviction_based_on_time(self):
        certs = CertificatesManager(FIFOCache(cache_timeout=0.1))
        verifier = LocalVerifier(certs=certs, warning=False)
        # Prime the cache by verifying an assertion.
        assertion = make_assertion("*****@*****.**", "")
        self.assertTrue(verifier.verify(assertion))
        # Make it error out if re-fetching the keys

        with patched_key_fetching(exc=RuntimeError("key fetch disabled")):
            verifier.fetch_public_key = fetch_public_key
            # It should be in the cache, so this works fine.
            verifier.verify(assertion)
            # But after sleeping it gets evicted and the error is triggered.
            time.sleep(0.1)
            self.assertRaises(RuntimeError, verifier.verify, assertion)
示例#5
0
    def test_well_known_doc_with_public_key(self):
        #  The browserid.org server doesn't currently have /.well-known/vep.
        #  This simulates it with a dummy key.
        def urlopen(url, data):  # NOQA
            class response(object):
                @staticmethod
                def read():
                    key = fetch_public_key("browserid.org")
                    return json.dumps({"public-key": key})

            return response

        with patched_urlopen(urlopen):
            assertion = make_assertion("*****@*****.**", "http://e.com")
            self.assertTrue(self.verifier.verify(assertion))
示例#6
0
 def _getassertion(self):
     email = '*****@*****.**'
     url = 'http://tokenserver.services.mozilla.com'
     return make_assertion(email, url)
示例#7
0
 def test_verification_of_dummy_assertion_with_bad_certificate_sig(self):
     audience = "http://example.com"
     assertion = make_assertion("*****@*****.**", audience, certificate_sig="CORRUPTUS")
     self.assertRaises(InvalidSignatureError, self.verifier.verify, assertion)
示例#8
0
 def test_verification_of_expired_dummy_assertion(self):
     audience = "http://example.com"
     now = time.time() * 1000
     assertion = make_assertion("*****@*****.**", audience, exp=now - 1)
     self.assertTrue(self.verifier.verify(assertion, now=now - 2))
     self.assertRaises(ExpiredSignatureError, self.verifier.verify, assertion)
示例#9
0
 def test_verification_of_oldstyle_dummy_assertion(self):
     audience = "http://example.com"
     assertion = make_assertion("*****@*****.**", audience, new_style=False)
     self.assertTrue(self.verifier.verify(assertion))
     self.assertTrue(self.verifier.verify(assertion, audience))
     self.assertRaises(AudienceMismatchError, self.verifier.verify, assertion, "http://moz.com")