125 lines
4.1 KiB
C
125 lines
4.1 KiB
C
/**
|
|
****************************************************************************************
|
|
*
|
|
* @file bt_util_key.h
|
|
*
|
|
* @brief link manager key management
|
|
*
|
|
* Copyright (C) RivieraWaves 2009-2015
|
|
*
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
#ifndef BT_UTIL_KEY_H_
|
|
#define BT_UTIL_KEY_H_
|
|
/**
|
|
****************************************************************************************
|
|
* @defgroup LMKEY Link Keys
|
|
* @ingroup LM
|
|
* @brief LM module for link key management.
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
#include "co_bt.h" // BT standard definitions
|
|
|
|
/*
|
|
* FUNCTION DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Processes E1 algorithm for Authentication
|
|
*
|
|
* @param[in] Key Key Vector[16]
|
|
* @param[in] BdAddr BdAddr[6]
|
|
* @param[in] Random Random Vector[16]
|
|
* @param[out] Sres SRES Vector[4]
|
|
* @param[out] Aco ACIO Vector[12]
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void E1(struct ltk Key, struct bd_addr BdAddr, struct ltk Random, struct sres_nb *Sres, struct aco *Aco);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Processes E21 algorithm for Authentication
|
|
*
|
|
* @param[in] Random Random Vector[16]
|
|
* @param[in] BdAddr BdAddr[6]
|
|
* @param[out] Key Result Vector[16]
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void E21(struct ltk Random, struct bd_addr BdAddr, struct ltk *Key);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Processes E22 algorithm for Authentication
|
|
*
|
|
* @param[in] Random Random Vector[16]
|
|
* @param[in] BdAddr BdAddr[6]
|
|
* @param[in] Pin PIN Vector[1..16]
|
|
* @param[in] PinLen PIN length (1..16)
|
|
* @param[out] KeyOut Result Vector[16]
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void E22(struct ltk Random, struct bd_addr BdAddr, struct pin_code Pin, uint8_t PinLen, struct ltk *KeyOut);
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Processes E3 algorithm for Authentication
|
|
*
|
|
* @param[in] Key Key Vector[16]
|
|
* @param[in] Cof COF[12]
|
|
* @param[in] Random Random Vector[16]
|
|
* @param[out] KeyOut Result Vector[16]
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void E3(struct ltk Key, struct aco Cof, struct ltk Random, struct ltk *KeyOut);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Encryption : Processes K'c Key for encryption
|
|
*
|
|
* @param[in] Random Random Vector[16]
|
|
* @param[in] BdAddr BdAddr[6]
|
|
* @param[out] KPrimC K'c Vector (Result)
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void KPrimC(struct ltk Kc, uint8_t length, struct ltk *KPrimC);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Xor of 2 Vectors
|
|
*
|
|
* @param[in] VectorIn1 Input Vector1 [16]
|
|
* @param[in] VectorIn2 Input Vector2 [16]
|
|
* @param[out] VectorOut Result Vector[16]
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void XorKey(struct ltk VectorIn1, struct ltk VectorIn2, struct ltk *VectorOut);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function is used to get a random vector.
|
|
*
|
|
* @param[out] Vector Random Vector
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void LM_MakeRandVec(struct ltk *Vector);
|
|
|
|
///@} LMKEY
|
|
|
|
#endif // BT_UTIL_KEY_H_
|