Release 0.1.65
[platform/core/security/key-manager.git] / unit-tests / test_decider.cpp
1 /*
2  *  Copyright (c) 2023 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License
15  */
16
17 #include <vector>
18
19 #include <boost_macros_wrapper.h>
20
21 #include <platform/decider.h>
22
23 using namespace CKM;
24 using namespace CKM::Crypto;
25
26 namespace {
27
28 struct Mapping {
29         bool import; // true - import, false - generate
30         bool encrypted;
31         DataType type;
32         bool extractable;
33         bool swBackend;
34         bool tzBackend;
35 };
36
37 std::vector<Mapping> MAPPING {
38 //   imp.,  enc.,  type,                        ext.,  SW,    TZ
39         {true,  false, DataType::BINARY_DATA,       false, true,  true  },
40         {true,  false, DataType::BINARY_DATA,       true,  true,  true  },
41
42         {true,  false, DataType::KEY_AES,           false, true,  true  },
43         {true,  false, DataType::KEY_AES,           true,  true,  false },
44
45         {true,  false, DataType::KEY_RSA_PRIVATE,   false, true,  true  },
46         {true,  false, DataType::KEY_RSA_PRIVATE,   true,  true,  false },
47         {true,  false, DataType::KEY_RSA_PUBLIC,    false, true,  true  },
48         {true,  false, DataType::KEY_RSA_PUBLIC,    true,  true,  false },
49
50         {true,  false, DataType::KEY_DSA_PRIVATE,   false, true,  true  },
51         {true,  false, DataType::KEY_DSA_PRIVATE,   true,  true,  false },
52         {true,  false, DataType::KEY_DSA_PUBLIC,    false, true,  true  },
53         {true,  false, DataType::KEY_DSA_PUBLIC,    true,  true,  false },
54
55         {true,  false, DataType::KEY_ECDSA_PRIVATE, false, true,  true  },
56         {true,  false, DataType::KEY_ECDSA_PRIVATE, true,  true,  false },
57         {true,  false, DataType::KEY_ECDSA_PUBLIC,  false, true,  true  },
58         {true,  false, DataType::KEY_ECDSA_PUBLIC,  true,  true,  false },
59
60         {true,  false, DataType::CERTIFICATE,       false, true,  false },
61         {true,  false, DataType::CERTIFICATE,       true,  true,  false },
62
63         {true,  false, DataType::CHAIN_CERT_0,      false, true,  false },
64         {true,  false, DataType::CHAIN_CERT_0,      true,  true,  false },
65
66
67         {true,  true,  DataType::BINARY_DATA,       false, false, true  },
68         {true,  true,  DataType::BINARY_DATA,       true,  false, true  },
69
70         {true,  true,  DataType::KEY_AES,           false, false, true  },
71         {true,  true,  DataType::KEY_AES,           true,  false, false },
72
73         {true,  true,  DataType::KEY_RSA_PRIVATE,   false, false, true  },
74         {true,  true,  DataType::KEY_RSA_PRIVATE,   true,  false, false },
75         {true,  true,  DataType::KEY_RSA_PUBLIC,    false, false, true  },
76         {true,  true,  DataType::KEY_RSA_PUBLIC,    true,  false, false },
77
78         {true,  true,  DataType::KEY_DSA_PRIVATE,   false, false, true  },
79         {true,  true,  DataType::KEY_DSA_PRIVATE,   true,  false, false },
80         {true,  true,  DataType::KEY_DSA_PUBLIC,    false, false, true  },
81         {true,  true,  DataType::KEY_DSA_PUBLIC,    true,  false, false },
82
83         {true,  true,  DataType::KEY_ECDSA_PRIVATE, false, false, true  },
84         {true,  true,  DataType::KEY_ECDSA_PRIVATE, true,  false, false },
85         {true,  true,  DataType::KEY_ECDSA_PUBLIC,  false, false, true  },
86         {true,  true,  DataType::KEY_ECDSA_PUBLIC,  true,  false, false },
87
88         {true,  true,  DataType::CERTIFICATE,       false, false, false },
89         {true,  true,  DataType::CERTIFICATE,       true,  false, false },
90
91         {true,  true,  DataType::CHAIN_CERT_0,      false, false, false },
92         {true,  true,  DataType::CHAIN_CERT_0,      true,  false, false },
93
94
95         {false, false, DataType::BINARY_DATA,       false, true,  true  },
96         {false, false, DataType::BINARY_DATA,       true,  true,  true  },
97
98         {false, false, DataType::KEY_AES,           false, true,  true  },
99         {false, false, DataType::KEY_AES,           true,  true,  false },
100
101         {false, false, DataType::KEY_RSA_PRIVATE,   false, true,  true  },
102         {false, false, DataType::KEY_RSA_PRIVATE,   true,  true,  false },
103         {false, false, DataType::KEY_RSA_PUBLIC,    false, true,  true  },
104         {false, false, DataType::KEY_RSA_PUBLIC,    true,  true,  false },
105
106         {false, false, DataType::KEY_DSA_PRIVATE,   false, true,  true  },
107         {false, false, DataType::KEY_DSA_PRIVATE,   true,  true,  false },
108         {false, false, DataType::KEY_DSA_PUBLIC,    false, true,  true  },
109         {false, false, DataType::KEY_DSA_PUBLIC,    true,  true,  false },
110
111         {false, false, DataType::KEY_ECDSA_PRIVATE, false, true,  true  },
112         {false, false, DataType::KEY_ECDSA_PRIVATE, true,  true,  false },
113         {false, false, DataType::KEY_ECDSA_PUBLIC,  false, true,  true  },
114         {false, false, DataType::KEY_ECDSA_PUBLIC,  true,  true,  false },
115
116         {false, false, DataType::CERTIFICATE,       false, false, false },
117         {false, false, DataType::CERTIFICATE,       true,  false, false },
118
119         {false, false, DataType::CHAIN_CERT_0,      false, false, false },
120         {false, false, DataType::CHAIN_CERT_0,      true,  false, false },
121 };
122
123 } // namespace
124
125 BOOST_AUTO_TEST_SUITE(DECIDER_TEST)
126
127 POSITIVE_TEST_CASE(MappingTest)
128 {
129         Decider d;
130         bool ret;
131         for (const auto& row : MAPPING) {
132                 Policy policy("", row.extractable);
133
134                 ret = d.checkStore(CryptoBackend::OpenSSL, row.type, policy, row.import, row.encrypted);
135                 BOOST_REQUIRE(ret == row.swBackend);
136
137                 ret = d.checkStore(CryptoBackend::TrustZone, row.type, policy, row.import, row.encrypted);
138 #ifdef TZ_BACKEND_ENABLED
139                 BOOST_REQUIRE(ret == row.tzBackend);
140 #else
141                 BOOST_REQUIRE(ret == false);
142 #endif
143
144                 ret = d.checkStore(CryptoBackend::None, row.type, policy, row.import, row.encrypted);
145                 BOOST_REQUIRE(ret == false);
146
147                 ret = d.checkStore(CryptoBackend::SecureElement,
148                                    row.type,
149                                    policy,
150                                    row.import,
151                                    row.encrypted);
152                 BOOST_REQUIRE(ret == false);
153         }
154 }
155
156 BOOST_AUTO_TEST_SUITE_END()