summaryrefslogtreecommitdiff
path: root/monitor/josef_experimental.py
blob: 3c7e590240600883f12401347e9a510f983c7818 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/python
# -*- coding: utf-8 -*-     

import sys
from josef_lib import *
import leveldb
import argparse
import json
from josef_leveldb import *
from datetime import datetime as dt
from josef_monitor import verify_inclusion_by_hash


def verify_sct(baseurl, sctentry, key, sth_in=None):
    if sth_in is None:
        if baseurl:
            sth = get_sth(baseurl)
        else:
            print "No sth provided!"
    else:
        sth = sth_in

    # Verify signature
    leafcert = base64.b64decode(sctentry["leafcert"])
    if "issuer_key_hash" in sctentry:
        issuer_key_hash = base64.b64decode(sctentry["issuer_key_hash"])
    else:
        issuer_key_hash = None
    try:
        if issuer_key_hash:
            signed_entry = pack_precert(leafcert, issuer_key_hash)
        else:
            signed_entry = pack_cert(leafcert)
        check_sct_signature(baseurl, signed_entry, sctentry["sct"], precert=issuer_key_hash, publickey=key)
        print "Signature OK"
    except AssertionError, e:
        print "ERROR:", e
    except urllib2.HTTPError, e:
        print "ERROR:", e
    except ecdsa.keys.BadSignatureError, e:
        print "ERROR: bad signature"
    
    # Verify inclusion
    h = get_leaf_hash(base64.b64decode(sctentry["leafcert"]))
    
    verify_inclusion_by_hash("https://localhost:8080/", h)





if __name__ == '__main__':
    f = open("sct_example")
    s = f.read()
    sctentry = json.loads(s)

    logpublickey = get_public_key_from_file("sct_example_logkey.pem")
    if "sth" in sctentry:
        print "found sth in sct"
        sth = sctentry["sth"]
    else:
        sth = None


    verify_sct(None, sctentry, logpublickey, sth)


    # print sctentry
    # print base64.b64decode(sctentry["leafcert"])
    # print base64.b64decode(get_entries("https://plausible.ct.nordu.net:/", 1234,1234)["entries"][0]["leaf_input"])