Skip to content
Snippets Groups Projects
Commit 297ebb4a authored by Chris Manton's avatar Chris Manton Committed by David Duarte
Browse files

Break out stack::include::smp_status.h

Bug: 282731464
Test: net_test_stack_smp
(cherry picked from https://android-review.googlesource.com/q/commit:7a639a84b58e349628916fd44db6da2ead3aeb89)
Merged-In: I15f52663b0a63399bbb37fdd278cd97a8d84bdbf
Change-Id: I15f52663b0a63399bbb37fdd278cd97a8d84bdbf
parent b963b9a9
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "bt_target.h" // Must be first to define build configuration #include "bt_target.h" // Must be first to define build configuration
#include "stack/include/bt_octets.h" #include "stack/include/bt_octets.h"
#include "stack/include/btm_status.h" #include "stack/include/btm_status.h"
#include "stack/include/smp_status.h"
#include "types/ble_address_with_type.h" #include "types/ble_address_with_type.h"
#include "types/raw_address.h" #include "types/raw_address.h"
...@@ -102,77 +103,6 @@ typedef enum : uint8_t { ...@@ -102,77 +103,6 @@ typedef enum : uint8_t {
SMP_LE_ADDR_ASSOC_EVT = 15, /* Identity address association event */ SMP_LE_ADDR_ASSOC_EVT = 15, /* Identity address association event */
} tSMP_EVT; } tSMP_EVT;
/* pairing failure reason code */
typedef enum : uint8_t {
SMP_SUCCESS = 0,
SMP_PASSKEY_ENTRY_FAIL = 0x01,
SMP_OOB_FAIL = 0x02,
SMP_PAIR_AUTH_FAIL = 0x03,
SMP_CONFIRM_VALUE_ERR = 0x04,
SMP_PAIR_NOT_SUPPORT = 0x05,
SMP_ENC_KEY_SIZE = 0x06,
SMP_INVALID_CMD = 0x07,
SMP_PAIR_FAIL_UNKNOWN = 0x08,
SMP_REPEATED_ATTEMPTS = 0x09,
SMP_INVALID_PARAMETERS = 0x0A,
SMP_DHKEY_CHK_FAIL = 0x0B,
SMP_NUMERIC_COMPAR_FAIL = 0x0C,
SMP_BR_PARING_IN_PROGR = 0x0D,
SMP_XTRANS_DERIVE_NOT_ALLOW = 0x0E,
SMP_MAX_FAIL_RSN_PER_SPEC = SMP_XTRANS_DERIVE_NOT_ALLOW,
/* self defined error code */
SMP_PAIR_INTERNAL_ERR = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x01), /* 0x0F */
/* Unknown IO capability, unable to decide association model */
SMP_UNKNOWN_IO_CAP = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x02), /* 0x10 */
SMP_BUSY = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x05), /* 0x13 */
SMP_ENC_FAIL = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x06), /* 0x14 */
SMP_STARTED = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x07), /* 0x15 */
SMP_RSP_TIMEOUT = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x08), /* 0x16 */
/* Unspecified failure reason */
SMP_FAIL = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0A), /* 0x18 */
SMP_CONN_TOUT = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0B), /* 0x19 */
} tSMP_STATUS;
#define CASE_RETURN_TEXT(code) \
case code: \
return #code
inline std::string smp_status_text(const tSMP_STATUS& status) {
switch (status) {
CASE_RETURN_TEXT(SMP_SUCCESS);
CASE_RETURN_TEXT(SMP_PASSKEY_ENTRY_FAIL);
CASE_RETURN_TEXT(SMP_OOB_FAIL);
CASE_RETURN_TEXT(SMP_PAIR_AUTH_FAIL);
CASE_RETURN_TEXT(SMP_CONFIRM_VALUE_ERR);
CASE_RETURN_TEXT(SMP_PAIR_NOT_SUPPORT);
CASE_RETURN_TEXT(SMP_ENC_KEY_SIZE);
CASE_RETURN_TEXT(SMP_INVALID_CMD);
CASE_RETURN_TEXT(SMP_PAIR_FAIL_UNKNOWN);
CASE_RETURN_TEXT(SMP_REPEATED_ATTEMPTS);
CASE_RETURN_TEXT(SMP_INVALID_PARAMETERS);
CASE_RETURN_TEXT(SMP_DHKEY_CHK_FAIL);
CASE_RETURN_TEXT(SMP_NUMERIC_COMPAR_FAIL);
CASE_RETURN_TEXT(SMP_BR_PARING_IN_PROGR);
CASE_RETURN_TEXT(SMP_XTRANS_DERIVE_NOT_ALLOW);
CASE_RETURN_TEXT(SMP_PAIR_INTERNAL_ERR);
CASE_RETURN_TEXT(SMP_UNKNOWN_IO_CAP);
CASE_RETURN_TEXT(SMP_BUSY);
CASE_RETURN_TEXT(SMP_ENC_FAIL);
CASE_RETURN_TEXT(SMP_STARTED);
CASE_RETURN_TEXT(SMP_RSP_TIMEOUT);
CASE_RETURN_TEXT(SMP_FAIL);
CASE_RETURN_TEXT(SMP_CONN_TOUT);
default:
return base::StringPrintf("UNKNOWN[%hhu]", status);
}
}
#undef CASE_RETURN_TEXT
/* Device IO capability */ /* Device IO capability */
#define SMP_IO_CAP_IO BTM_IO_CAP_IO /* DisplayYesNo */ #define SMP_IO_CAP_IO BTM_IO_CAP_IO /* DisplayYesNo */
#define SMP_IO_CAP_KBDISP BTM_IO_CAP_KBDISP /* Keyboard Display */ #define SMP_IO_CAP_KBDISP BTM_IO_CAP_KBDISP /* Keyboard Display */
......
/******************************************************************************
*
* Copyright 1999-2012 Broadcom 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.
*
******************************************************************************/
#pragma once
#include <base/strings/stringprintf.h>
#include <cstdint>
/* pairing failure reason code */
typedef enum : uint8_t {
SMP_SUCCESS = 0,
SMP_PASSKEY_ENTRY_FAIL = 0x01,
SMP_OOB_FAIL = 0x02,
SMP_PAIR_AUTH_FAIL = 0x03,
SMP_CONFIRM_VALUE_ERR = 0x04,
SMP_PAIR_NOT_SUPPORT = 0x05,
SMP_ENC_KEY_SIZE = 0x06,
SMP_INVALID_CMD = 0x07,
SMP_PAIR_FAIL_UNKNOWN = 0x08,
SMP_REPEATED_ATTEMPTS = 0x09,
SMP_INVALID_PARAMETERS = 0x0A,
SMP_DHKEY_CHK_FAIL = 0x0B,
SMP_NUMERIC_COMPAR_FAIL = 0x0C,
SMP_BR_PARING_IN_PROGR = 0x0D,
SMP_XTRANS_DERIVE_NOT_ALLOW = 0x0E,
SMP_MAX_FAIL_RSN_PER_SPEC = SMP_XTRANS_DERIVE_NOT_ALLOW,
/* self defined error code */
SMP_PAIR_INTERNAL_ERR = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x01), /* 0x0F */
/* Unknown IO capability, unable to decide association model */
SMP_UNKNOWN_IO_CAP = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x02), /* 0x10 */
SMP_BUSY = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x05), /* 0x13 */
SMP_ENC_FAIL = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x06), /* 0x14 */
SMP_STARTED = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x07), /* 0x15 */
SMP_RSP_TIMEOUT = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x08), /* 0x16 */
/* Unspecified failure reason */
SMP_FAIL = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0A), /* 0x18 */
SMP_CONN_TOUT = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0B), /* 0x19 */
} tSMP_STATUS;
#ifndef CASE_RETURN_TEXT
#define CASE_RETURN_TEXT(code) \
case code: \
return #code
#endif
inline std::string smp_status_text(const tSMP_STATUS& status) {
switch (status) {
CASE_RETURN_TEXT(SMP_SUCCESS);
CASE_RETURN_TEXT(SMP_PASSKEY_ENTRY_FAIL);
CASE_RETURN_TEXT(SMP_OOB_FAIL);
CASE_RETURN_TEXT(SMP_PAIR_AUTH_FAIL);
CASE_RETURN_TEXT(SMP_CONFIRM_VALUE_ERR);
CASE_RETURN_TEXT(SMP_PAIR_NOT_SUPPORT);
CASE_RETURN_TEXT(SMP_ENC_KEY_SIZE);
CASE_RETURN_TEXT(SMP_INVALID_CMD);
CASE_RETURN_TEXT(SMP_PAIR_FAIL_UNKNOWN);
CASE_RETURN_TEXT(SMP_REPEATED_ATTEMPTS);
CASE_RETURN_TEXT(SMP_INVALID_PARAMETERS);
CASE_RETURN_TEXT(SMP_DHKEY_CHK_FAIL);
CASE_RETURN_TEXT(SMP_NUMERIC_COMPAR_FAIL);
CASE_RETURN_TEXT(SMP_BR_PARING_IN_PROGR);
CASE_RETURN_TEXT(SMP_XTRANS_DERIVE_NOT_ALLOW);
CASE_RETURN_TEXT(SMP_PAIR_INTERNAL_ERR);
CASE_RETURN_TEXT(SMP_UNKNOWN_IO_CAP);
CASE_RETURN_TEXT(SMP_BUSY);
CASE_RETURN_TEXT(SMP_ENC_FAIL);
CASE_RETURN_TEXT(SMP_STARTED);
CASE_RETURN_TEXT(SMP_RSP_TIMEOUT);
CASE_RETURN_TEXT(SMP_FAIL);
CASE_RETURN_TEXT(SMP_CONN_TOUT);
default:
return base::StringPrintf("UNKNOWN[%hhu]", status);
}
}
#undef CASE_RETURN_TEXT
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "stack/include/acl_api.h" #include "stack/include/acl_api.h"
#include "stack/include/bt_octets.h" #include "stack/include/bt_octets.h"
#include "stack/include/smp_api.h" #include "stack/include/smp_api.h"
#include "stack/include/smp_status.h"
#include "stack/smp/p_256_ecc_pp.h" #include "stack/smp/p_256_ecc_pp.h"
#include "stack/smp/smp_int.h" #include "stack/smp/smp_int.h"
#include "test/common/mock_functions.h" #include "test/common/mock_functions.h"
...@@ -35,6 +36,8 @@ ...@@ -35,6 +36,8 @@
#include "types/hci_role.h" #include "types/hci_role.h"
#include "types/raw_address.h" #include "types/raw_address.h"
using testing::StrEq;
tBTM_CB btm_cb; tBTM_CB btm_cb;
const std::string kSmpOptions("mock smp options"); const std::string kSmpOptions("mock smp options");
...@@ -140,8 +143,6 @@ Octet16 smp_gen_p2_4_confirm(tSMP_CB* p_cb, const RawAddress& remote_bda); ...@@ -140,8 +143,6 @@ Octet16 smp_gen_p2_4_confirm(tSMP_CB* p_cb, const RawAddress& remote_bda);
tSMP_STATUS smp_calculate_comfirm(tSMP_CB* p_cb, const Octet16& rand, tSMP_STATUS smp_calculate_comfirm(tSMP_CB* p_cb, const Octet16& rand,
Octet16* output); Octet16* output);
namespace testing {
void dump_uint128(const Octet16& a, char* buffer) { void dump_uint128(const Octet16& a, char* buffer) {
for (unsigned int i = 0; i < OCTET16_LEN; ++i) { for (unsigned int i = 0; i < OCTET16_LEN; ++i) {
snprintf(buffer, 3, "%02x", a[i]); snprintf(buffer, 3, "%02x", a[i]);
...@@ -174,7 +175,7 @@ Octet16 parse_uint128(const char* input) { ...@@ -174,7 +175,7 @@ Octet16 parse_uint128(const char* input) {
return output; return output;
} }
class SmpCalculateConfirmTest : public Test { class SmpCalculateConfirmTest : public testing::Test {
protected: protected:
tSMP_CB p_cb_; tSMP_CB p_cb_;
// Set random to 0x5783D52156AD6F0E6388274EC6702EE0 // Set random to 0x5783D52156AD6F0E6388274EC6702EE0
...@@ -401,4 +402,43 @@ TEST(SmpEccValidationTest, test_invalid_points) { ...@@ -401,4 +402,43 @@ TEST(SmpEccValidationTest, test_invalid_points) {
EXPECT_FALSE(ECC_ValidatePoint(p)); EXPECT_FALSE(ECC_ValidatePoint(p));
} }
} // namespace testing
TEST(SmpStatusText, smp_status_text) {
std::vector<std::pair<tSMP_STATUS, std::string>> status = {
std::make_pair(SMP_SUCCESS, "SMP_SUCCESS"),
std::make_pair(SMP_PASSKEY_ENTRY_FAIL, "SMP_PASSKEY_ENTRY_FAIL"),
std::make_pair(SMP_OOB_FAIL, "SMP_OOB_FAIL"),
std::make_pair(SMP_PAIR_AUTH_FAIL, "SMP_PAIR_AUTH_FAIL"),
std::make_pair(SMP_CONFIRM_VALUE_ERR, "SMP_CONFIRM_VALUE_ERR"),
std::make_pair(SMP_PAIR_NOT_SUPPORT, "SMP_PAIR_NOT_SUPPORT"),
std::make_pair(SMP_ENC_KEY_SIZE, "SMP_ENC_KEY_SIZE"),
std::make_pair(SMP_INVALID_CMD, "SMP_INVALID_CMD"),
std::make_pair(SMP_PAIR_FAIL_UNKNOWN, "SMP_PAIR_FAIL_UNKNOWN"),
std::make_pair(SMP_REPEATED_ATTEMPTS, "SMP_REPEATED_ATTEMPTS"),
std::make_pair(SMP_INVALID_PARAMETERS, "SMP_INVALID_PARAMETERS"),
std::make_pair(SMP_DHKEY_CHK_FAIL, "SMP_DHKEY_CHK_FAIL"),
std::make_pair(SMP_NUMERIC_COMPAR_FAIL, "SMP_NUMERIC_COMPAR_FAIL"),
std::make_pair(SMP_BR_PARING_IN_PROGR, "SMP_BR_PARING_IN_PROGR"),
std::make_pair(SMP_XTRANS_DERIVE_NOT_ALLOW,
"SMP_XTRANS_DERIVE_NOT_ALLOW"),
std::make_pair(SMP_MAX_FAIL_RSN_PER_SPEC,
"SMP_XTRANS_DERIVE_NOT_ALLOW"), // NOTE: Dup
std::make_pair(SMP_PAIR_INTERNAL_ERR, "SMP_PAIR_INTERNAL_ERR"),
std::make_pair(SMP_UNKNOWN_IO_CAP, "SMP_UNKNOWN_IO_CAP"),
std::make_pair(SMP_BUSY, "SMP_BUSY"),
std::make_pair(SMP_ENC_FAIL, "SMP_ENC_FAIL"),
std::make_pair(SMP_STARTED, "SMP_STARTED"),
std::make_pair(SMP_RSP_TIMEOUT, "SMP_RSP_TIMEOUT"),
std::make_pair(SMP_FAIL, "SMP_FAIL"),
std::make_pair(SMP_CONN_TOUT, "SMP_CONN_TOUT"),
};
for (const auto& stat : status) {
ASSERT_STREQ(stat.second.c_str(), smp_status_text(stat.first).c_str());
}
auto unknown =
base::StringPrintf("UNKNOWN[%hhu]", std::numeric_limits<uint8_t>::max());
ASSERT_STREQ(unknown.c_str(),
smp_status_text(static_cast<tSMP_STATUS>(
std::numeric_limits<uint8_t>::max()))
.c_str());
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment