Esempio n. 1
0
def getList(user, password, name):
    records = baseGetList(user, password, 1, name)
    keys = KeyDeriver(user, servername(), password)
    for record in records:
        value = keys.decrypt(record['value'])
        print "%d at %f: %s" % (record['version'], record['creationTime'],
                                value)
Esempio n. 2
0
def makeAuthParams(user, password):
    # FIXME: include server name, user name in t
    t = "%d:%d" % (int(time.time()), random.SystemRandom().getrandbits(20))
    keys = KeyDeriver(user, servername(), password)
    schnorr = keys.schnorr()
    (e, s) = schnorr.sign(t)
    params = {"user": user, "t": t, "e": b64enc(e), "s": b64enc(s)}
    return params
Esempio n. 3
0
def baseGetList(user, password, type, name, use_des=0):
    params = makeAuthParams(user, password)
    keys = KeyDeriver(user, servername(), password, use_des)
    params['name'] = keys.permute(concat([int2bin(type), name]))
    conn = connect()
    conn.request("GET", "/list-resource?" + urllib.urlencode(params))
    response = conn.getresponse()
    if response.status != 200:
        # FIXME: define a ProtocolError, perhaps?
        raise LookupError("HTTP error: %d %s" %
                          (response.status, response.reason))
    res = response.read()
    return json.loads(res)
Esempio n. 4
0
def register(user, password):
    keys = KeyDeriver(user, servername(), password)
    schnorr = keys.schnorr()
    public = b64enc(schnorr.public())
    params = urllib.urlencode({"user": user, "publicKey": public})
    headers = {
        "Content-Type": "application/x-www-form-urlencoded",
        "Accept": "text/plain"
    }
    conn = connect()
    conn.request("POST", "/register", params, headers)
    response = conn.getresponse()
    print response.status, response.reason
    print response.read()
Esempio n. 5
0
def add(user, password, type, name, value, use_des=0):
    params = makeAuthParams(user, password)
    keys = KeyDeriver(user, servername(), password, use_des)
    params['name'] = keys.permute(concat([int2bin(type), name]))
    params['value'] = b64enc(keys.encrypt(value))
    params = urllib.urlencode(params)
    headers = {
        "Content-Type": "application/x-www-form-urlencoded",
        "Accept": "text/plain"
    }
    conn = connect()
    conn.request("POST", "/add-resource", params, headers)
    response = conn.getresponse()
    print response.status, response.reason
    print response.read()
Esempio n. 6
0
def splitGet(user, password, name):
    splits = getSplits(user, password)
    k = int(splits[0])
    n = (len(splits) - 1) / 2
    assert int(n) == n
    assert k <= n

    keys = KeyDeriver(password)
    shares = {}
    # FIXME: obviously we should try all n until we get k splits
    for s in range(k):
        global host, port
        host = splits[2 * s + 1]
        port = splits[2 * s + 2]
        print "Getting split", s, "from", host + ":" + port
        records = baseGetList(user, password, 1, name)
        record = records[-1]
        share = unconcat(keys.decrypt(record['value']))
        assert len(share) == 2
        shares[bin2int(share[0])] = bin2int(share[1])

    splitter = ShamirSplit()
    secret = splitter.recover(shares)
    print "value =", secret
Esempio n. 7
0
def getSplits(user, password):
    records = baseGetList(user, password, 2, "split servers")
    record = records[-1]
    keys = KeyDeriver(password)
    splits = unconcat(keys.decrypt(record['value']))
    return splits
Esempio n. 8
0
def getRSA(user, password, name):
    rsas = baseGetList(user, password, 3, name, use_des=1)
    keys = KeyDeriver(password, 1)
    for rsa in rsas:
        key = json.loads(keys.decrypt(rsa['value']))
        print key