75 lines
2.2 KiB
C
75 lines
2.2 KiB
C
/* ecc.h - ECDH helpers */
|
|
|
|
/*
|
|
* Copyright (c) 2016 Intel Corporation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/* @brief Container for public key callback */
|
|
struct bt_pub_key_cb {
|
|
/** @brief Callback type for Public Key generation.
|
|
*
|
|
* Used to notify of the local public key or that the local key is not
|
|
* available (either because of a failure to read it or because it is
|
|
* being regenerated).
|
|
*
|
|
* @param key The local public key, or NULL in case of no key.
|
|
*/
|
|
void (*func)(const uint8_t key[64]);
|
|
|
|
struct bt_pub_key_cb *_next;
|
|
};
|
|
|
|
/* @brief Generate a new Public Key.
|
|
*
|
|
* Generate a new ECC Public Key. The callback will persist even after the
|
|
* key has been generated, and will be used to notify of new generation
|
|
* processes (NULL as key).
|
|
*
|
|
* @param cb Callback to notify the new key, or NULL to request an update
|
|
* without registering any new callback.
|
|
*
|
|
* @return Zero on success or negative error code otherwise
|
|
*/
|
|
int bt_pub_key_gen(struct bt_pub_key_cb *cb);
|
|
|
|
/* @brief Get the current Public Key.
|
|
*
|
|
* Get the current ECC Public Key.
|
|
*
|
|
* @return Current key, or NULL if not available.
|
|
*/
|
|
const uint8_t *bt_pub_key_get(void);
|
|
|
|
/* @typedef bt_dh_key_cb_t
|
|
* @brief Callback type for DH Key calculation.
|
|
*
|
|
* Used to notify of the calculated DH Key.
|
|
*
|
|
* @param key The DH Key, or NULL in case of failure.
|
|
*/
|
|
typedef void (*bt_dh_key_cb_t)(const uint8_t key[32]);
|
|
|
|
/* @brief Calculate a DH Key from a remote Public Key.
|
|
*
|
|
* Calculate a DH Key from the remote Public Key.
|
|
*
|
|
* @param remote_pk Remote Public Key.
|
|
* @param cb Callback to notify the calculated key.
|
|
*
|
|
* @return Zero on success or negative error code otherwise
|
|
*/
|
|
int bt_dh_key_gen(const uint8_t remote_pk[64], bt_dh_key_cb_t cb);
|
|
|