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