blob: c9450e23d02b761fed518f65ea91354c00da8e21 [file] [log] [blame]
/*
* Copyright 2018 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef _PERSIST_H_
#define _PERSIST_H_
#include "bt.h"
#include "types.h"
//key types are also bits in "haveKeys" for enumeration
#define KEY_TYPE_MITM_PROTECTED 0 /* EDR key generated with MITM protection */
#define KEY_TYPE_MITM_UNPROTECTED 1 /* EDR key generated without MITM protection */
#define KEY_TYPE_CSRK 2 /* LE connection signature resolving key */
#define KEY_TYPE_IRK 3 /* LE identity resolving key */
#define KEY_TYPE_DHK 4 /* LE diversifier hiding key */
#define KEY_TYPE_LTK 5 /* LE long term key generated and given by peer device*/
#define KEY_TYPE_MY_LTK 6 /* LE long term key generated by us */
//number types are also bits in "haveNums" for enumeration
#define PERSIST_NUM_TYPE_SM_RANDOM 0 /* random number generated and given by peer device */
#define PERSIST_NUM_TYPE_SM_MY_RANDOM 1 /* random number generated by us */
#define PERSIST_NUM_TYPE_SM_EDIV 2 /* encrypted diversifier value generated by peer device */
#define PERSIST_NUM_TYPE_SM_MY_DIV 3 /* diversifier value generated by us */
#define PERSIST_NUM_TYPE_SM_MITM_PROTECT 4 /* MITM protection provided by the stored LTKs */
#define PERSIST_NUM_TYPE_SM_BOND 5 /* bonding relationship with the peer device */
/* callbacks are called with internal mutex held - do not call back into persist funcs or wait too
* long! Return true go on enumerating. False to stop. */
typedef bool (*persistKnownDevEnumeratorF)(void *cbkData, const struct bt_addr *addr,
const void *name, uint32_t nameLen, uint32_t devCls, uint32_t haveKeys,
const uint8_t *wantedKey, uint32_t haveNums, const uint64_t *wantedNum);
void persistLoad(void); //load prefs
void persistStore(void); //store prefs
uint32_t persistGetDeviceName(void* buf); //should be at least HCI_DEV_NAME_LEN bytes long. actual length returned
bool persistSetDeviceName(const void *buf, uint32_t len); //should be at most HCI_DEV_NAME_LEN bytes long
uint8_t persistGetDiscoveryLength(void);
bool persistSetDiscoveryLength(uint8_t len);
//return false if callback terminated enumeration. wantedKeyType can be null if we don't care about
//keys. wantedNumType can be null if we don't care about numbers.
bool persistEnumKnownDevs(persistKnownDevEnumeratorF enumF, void *cbkData,
const uint8_t *wantedKeyType, const uint8_t *wantedNumType);
bool persistGetKnownDev(const struct bt_addr *addr, void *name, uint32_t *nameLen, uint32_t *devCls);
void persistAddKnownDev(const struct bt_addr *addr, const void *name, const uint32_t *nameLen, bool nameIsFull, const uint32_t *devCls);
void persistDelKnownDev(const struct bt_addr *addr);
bool persistAddDevKey(const struct bt_addr *addr, uint8_t keyType, const uint8_t *key); //addr = NULL for our own keys, all keys are HCI_LINK_KEY_LEN bytes long
bool persistGetDevKey(const struct bt_addr *addr, uint8_t keyType, uint8_t *key); //addr = NULL for our own keys, all keys are HCI_LINK_KEY_LEN bytes long
bool persistDelDevKeys(const struct bt_addr *addr); //addr = NULL for our own keys, all keys are HCI_LINK_KEY_LEN bytes long
bool persistAddDevNumber(const struct bt_addr *addr, uint8_t numType, uint64_t num); //addr = NULL for our own numbers
bool persistGetDevNumber(const struct bt_addr *addr, uint8_t numType, uint64_t *num); //addr = NULL for our own numbers
bool persistDelDevNumbers(const struct bt_addr *addr); //addr = NULL for our own numbers
#endif