def test_get_proof_by_hash_raises_on_unknown_hash(self): client = log_client.LogClient( test_util.DEFAULT_URI, self.FakeHandler(test_util.DEFAULT_URI, tree_size=3)) leaf_hash = "bogus" self.assertRaises(log_client.HTTPClientError, client.get_proof_by_hash, leaf_hash, 2)
def test_get_sth_consistency_trivial(self): client = log_client.LogClient( test_util.DEFAULT_URI, self.FakeHandler(test_util.DEFAULT_URI, tree_size=3)) self.assertEqual(client.get_sth_consistency(0, 0), []) self.assertEqual(client.get_sth_consistency(0, 2), []) self.assertEqual(client.get_sth_consistency(2, 2), [])
def _submit_to_single_log(log_url, full_chain): """Submits the chain to a single log specified by log_url.""" ct_client = log_client.LogClient(log_url, connection_timeout=10) res = None try: res = ct_client.add_chain(full_chain) except log_client.HTTPError as err: logging.info('Skipping log %s because of error: %s\n', log_url, err) return res
def fetch_single_proof(leaf_hash, log_url): """Fetch the proof for the supplied certificate.""" client = log_client.LogClient(log_url) sth = client.get_sth() if FLAGS.verbose: print "The log contains %d certificates." % (sth.tree_size) print "Tree root hash: %s" % (sth.sha256_root_hash.encode("hex")) proof_from_hash = client.get_proof_by_hash(leaf_hash, sth.tree_size) return sth, proof_from_hash
def test_add_valid_chain(self): certs_chain = ["one", "two", "three"] json_sct_response = ( '{"sct_version":0,"id":"pLkJkLQYWBSHuxOizGdwCjw1m' 'AT5G9+443fNDsgN3BA=","timestamp":1373015623951,\n' '"extensions":"",\n' '"signature":"BAMARjBEAiAggPtKUMFZ4zmNnPhc7As7VR1Dedsdggs9a8pSEHoy' 'GAIgKGsvIPDZgDnxTjGY8fSBwkl15dA0TUqW5ex2HCU7yE8="}') mock_handler = mock.Mock() mock_handler.post_response_body.return_value = json_sct_response client = log_client.LogClient("http://ctlog", handler=mock_handler) received_sct = client.add_chain(certs_chain) mock_handler.post_response_body.assert_called_once_with( "http://ctlog/ct/v1/add-chain", post_data={'chain': [base64.b64encode(t) for t in certs_chain]}) self._verify_sct_contents(received_sct)
def __init__(self, ct_logs, db, temp_db_factory, monitor_state_dir): """Initialize from a CtLogs proto.""" threading.Thread.__init__(self) self.__monitors = [] self.__db = db for log in ct_logs.ctlog: if not log.log_server or not log.log_id or not log.public_key_info: raise RuntimeError("Cannot start monitor: log proto has " "missing or empty fields: %s" % log) client = log_client.LogClient(log.log_server) hasher = merkle.TreeHasher() verifier = verify.LogVerifier(log.public_key_info, merkle.MerkleVerifier(hasher)) state_keeper = state.StateKeeper(FLAGS.monitor_state_dir + "/" + log.log_id) temp_db = temp_db_factory.create_storage(log.log_server) self.__monitors.append( monitor.Monitor(client, verifier, hasher, db, temp_db, state_keeper)) self.__last_update_start_time = 0 self.__stopped = False