• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 The Pigweed Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
5 // the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
13 // the License.
14 
15 #include "pw_bluetooth_sapphire/internal/host/gap/types.h"
16 
17 #include "pw_unit_test/framework.h"
18 
19 namespace bt::gap {
20 
TEST(TypesTest,SecurityPropertiesMeetRequirements)21 TEST(TypesTest, SecurityPropertiesMeetRequirements) {
22   std::array<hci_spec::LinkKeyType, 5> kUnauthenticatedNoScKeyTypes = {
23       hci_spec::LinkKeyType::kCombination,
24       hci_spec::LinkKeyType::kLocalUnit,
25       hci_spec::LinkKeyType::kRemoteUnit,
26       hci_spec::LinkKeyType::kDebugCombination,
27       hci_spec::LinkKeyType::kUnauthenticatedCombination192};
28   for (size_t i = 0; i < kUnauthenticatedNoScKeyTypes.size(); i++) {
29     SCOPED_TRACE(i);
30     sm::SecurityProperties props(kUnauthenticatedNoScKeyTypes[i]);
31     EXPECT_TRUE(SecurityPropertiesMeetRequirements(
32         props,
33         BrEdrSecurityRequirements{.authentication = false,
34                                   .secure_connections = false}));
35     EXPECT_FALSE(SecurityPropertiesMeetRequirements(
36         props,
37         BrEdrSecurityRequirements{.authentication = false,
38                                   .secure_connections = true}));
39     EXPECT_FALSE(SecurityPropertiesMeetRequirements(
40         props,
41         BrEdrSecurityRequirements{.authentication = true,
42                                   .secure_connections = false}));
43     EXPECT_FALSE(SecurityPropertiesMeetRequirements(
44         props,
45         BrEdrSecurityRequirements{.authentication = true,
46                                   .secure_connections = true}));
47   }
48 
49   sm::SecurityProperties props(
50       hci_spec::LinkKeyType::kAuthenticatedCombination192);
51   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
52       props,
53       BrEdrSecurityRequirements{.authentication = false,
54                                 .secure_connections = false}));
55   EXPECT_FALSE(SecurityPropertiesMeetRequirements(
56       props,
57       BrEdrSecurityRequirements{.authentication = false,
58                                 .secure_connections = true}));
59   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
60       props,
61       BrEdrSecurityRequirements{.authentication = true,
62                                 .secure_connections = false}));
63   EXPECT_FALSE(SecurityPropertiesMeetRequirements(
64       props,
65       BrEdrSecurityRequirements{.authentication = true,
66                                 .secure_connections = true}));
67 
68   props = sm::SecurityProperties(
69       hci_spec::LinkKeyType::kUnauthenticatedCombination256);
70   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
71       props,
72       BrEdrSecurityRequirements{.authentication = false,
73                                 .secure_connections = false}));
74   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
75       props,
76       BrEdrSecurityRequirements{.authentication = false,
77                                 .secure_connections = true}));
78   EXPECT_FALSE(SecurityPropertiesMeetRequirements(
79       props,
80       BrEdrSecurityRequirements{.authentication = true,
81                                 .secure_connections = false}));
82   EXPECT_FALSE(SecurityPropertiesMeetRequirements(
83       props,
84       BrEdrSecurityRequirements{.authentication = true,
85                                 .secure_connections = true}));
86 
87   props = sm::SecurityProperties(
88       hci_spec::LinkKeyType::kAuthenticatedCombination256);
89   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
90       props,
91       BrEdrSecurityRequirements{.authentication = false,
92                                 .secure_connections = false}));
93   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
94       props,
95       BrEdrSecurityRequirements{.authentication = false,
96                                 .secure_connections = true}));
97   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
98       props,
99       BrEdrSecurityRequirements{.authentication = true,
100                                 .secure_connections = false}));
101   EXPECT_TRUE(SecurityPropertiesMeetRequirements(
102       props,
103       BrEdrSecurityRequirements{.authentication = true,
104                                 .secure_connections = true}));
105 }
106 
107 }  // namespace bt::gap
108