diff options
Diffstat (limited to 'tools/certtools.py')
-rw-r--r-- | tools/certtools.py | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/tools/certtools.py b/tools/certtools.py index fa7f6ac..48e7b41 100644 --- a/tools/certtools.py +++ b/tools/certtools.py @@ -63,7 +63,7 @@ def get_proof_by_hash(baseurl, hash, tree_size): print params result = \ urllib2.urlopen(baseurl + "ct/v1/get-proof-by-hash?" + params).read() - return result + return json.loads(result) except urllib2.HTTPError, e: print e.read() sys.exit(1) @@ -72,6 +72,15 @@ def tls_array(data, length_len): length_bytes = struct.pack(">Q", len(data))[-length_len:] return length_bytes + data +def unpack_tls_array(packed_data, length_len): + padded_length = ["\x00"] * 8 + padded_length[-length_len:] = packed_data[:length_len] + (length,) = struct.unpack(">Q", "".join(padded_length)) + unpacked_data = packed_data[length_len:length_len+length] + assert len(unpacked_data) == length + rest_data = packed_data[length_len+length:] + return (unpacked_data, rest_data) + def add_chain(baseurl, submission): try: return json.loads(urllib2.urlopen(baseurl + "ct/v1/add-chain", @@ -79,3 +88,22 @@ def add_chain(baseurl, submission): except urllib2.HTTPError, e: print e.read() sys.exit(1) + +def get_entries(baseurl, start, end): + try: + params = urllib.urlencode({"start":start, "end":end}) + result = urllib2.urlopen(baseurl + "ct/v1/get-entries?" + params).read() + return json.loads(result) + except urllib2.HTTPError, e: + print e.read() + sys.exit(1) + +def decode_certificate_chain(packed_certchain): + (unpacked_certchain, rest) = unpack_tls_array(packed_certchain, 3) + assert len(rest) == 0 + certs = [] + while len(unpacked_certchain): + (cert, rest) = unpack_tls_array(unpacked_certchain, 3) + certs.append(cert) + unpacked_certchain = rest + return certs |