示例#1
0
def retrieve_credentials(url, submiturl=None, triggerUnlock=False):
    if not test_associate(triggerUnlock):
        return None

    request = {'RequestType': 'get-logins',
               'SortSelection': True,
               'TriggerUnlock': triggerUnlock}
    info = set_verifier(request)
    if info is None:
        return None
    [identifier, key] = info
    iv64 = request['Nonce']
    iv = base64.b64decode(iv64.encode('utf-8'))

    request['Url'] = base64.b64encode(ch.encrypt(url, key, iv)).decode('utf-8')

    if submiturl is not None:
        request['SubmitUrl'] = base64.b64encode(
            ch.encrypt(submiturl, key, iv)).decode('utf-8')

    response = send(request)

    entries = []

    if response is not None:
        # set_current_KeePassHttp_version(response['Version'])
        if verify_response(response, key, identifier):
            iv64_r = response['Nonce']
            iv_r = base64.b64decode(iv64_r.encode('utf-8'))

            for e in response['Entries']:
                decrypt_entry(e, key, iv_r)

            entries = response['Entries']

    return entries
示例#2
0
def set_verifier(request, inkey=None):
    identifier = None
    key = None
    if inkey is None:
        # happens when we don't want to associate
        info = cfg.get_crypto_key()
        if info is None:
            # TODO: proper execption handling
            return None
        [identifier, key] = info
        request['Id'] = identifier
    else:
        key = inkey

    iv = ch.generate_IV()
    iv64str = base64.b64encode(iv).decode('utf-8')
    request['Nonce'] = iv64str
    request['Verifier'] = base64.b64encode(
        ch.encrypt(iv64str, key, iv)).decode('utf-8')
    return [identifier, key]