3 * Copyright (c) 2020 Project CHIP Authors
4 * Copyright (c) 2019-2020 Google LLC.
5 * Copyright (c) 2018 Nest Labs, Inc.
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
23 * Utilities for interacting with multiple file partitions and maps
24 * key-value config calls to the correct partition.
27 #include <platform/internal/CHIPDeviceLayerInternal.h>
28 #include <platform/internal/testing/ConfigUnitTest.h>
30 #include <core/CHIPEncoding.h>
31 #include <platform/Darwin/PosixConfig.h>
32 #include <support/CodeUtils.h>
35 namespace DeviceLayer {
38 // *** CAUTION ***: Changing the names or namespaces of these values will *break* existing devices.
40 // NVS namespaces used to store device configuration information.
41 const char PosixConfig::kConfigNamespace_ChipFactory[] = "chip-factory";
42 const char PosixConfig::kConfigNamespace_ChipConfig[] = "chip-config";
43 const char PosixConfig::kConfigNamespace_ChipCounters[] = "chip-counters";
45 // Keys stored in the Chip-factory namespace
46 const PosixConfig::Key PosixConfig::kConfigKey_SerialNum = { kConfigNamespace_ChipFactory, "serial-num" };
47 const PosixConfig::Key PosixConfig::kConfigKey_MfrDeviceId = { kConfigNamespace_ChipFactory, "device-id" };
48 const PosixConfig::Key PosixConfig::kConfigKey_MfrDeviceCert = { kConfigNamespace_ChipFactory, "device-cert" };
49 const PosixConfig::Key PosixConfig::kConfigKey_MfrDeviceICACerts = { kConfigNamespace_ChipFactory, "device-ca-certs" };
50 const PosixConfig::Key PosixConfig::kConfigKey_MfrDevicePrivateKey = { kConfigNamespace_ChipFactory, "device-key" };
51 const PosixConfig::Key PosixConfig::kConfigKey_ProductRevision = { kConfigNamespace_ChipFactory, "product-rev" };
52 const PosixConfig::Key PosixConfig::kConfigKey_ManufacturingDate = { kConfigNamespace_ChipFactory, "mfg-date" };
53 const PosixConfig::Key PosixConfig::kConfigKey_SetupPinCode = { kConfigNamespace_ChipFactory, "pin-code" };
54 const PosixConfig::Key PosixConfig::kConfigKey_SetupDiscriminator = { kConfigNamespace_ChipFactory, "discriminator" };
56 // Keys stored in the Chip-config namespace
57 const PosixConfig::Key PosixConfig::kConfigKey_FabricId = { kConfigNamespace_ChipConfig, "fabric-id" };
58 const PosixConfig::Key PosixConfig::kConfigKey_ServiceConfig = { kConfigNamespace_ChipConfig, "service-config" };
59 const PosixConfig::Key PosixConfig::kConfigKey_PairedAccountId = { kConfigNamespace_ChipConfig, "account-id" };
60 const PosixConfig::Key PosixConfig::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" };
61 const PosixConfig::Key PosixConfig::kConfigKey_FabricSecret = { kConfigNamespace_ChipConfig, "fabric-secret" };
62 const PosixConfig::Key PosixConfig::kConfigKey_GroupKeyIndex = { kConfigNamespace_ChipConfig, "group-key-index" };
63 const PosixConfig::Key PosixConfig::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" };
64 const PosixConfig::Key PosixConfig::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" };
65 const PosixConfig::Key PosixConfig::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" };
66 const PosixConfig::Key PosixConfig::kConfigKey_OperationalDeviceId = { kConfigNamespace_ChipConfig, "op-device-id" };
67 const PosixConfig::Key PosixConfig::kConfigKey_OperationalDeviceCert = { kConfigNamespace_ChipConfig, "op-device-cert" };
68 const PosixConfig::Key PosixConfig::kConfigKey_OperationalDeviceICACerts = { kConfigNamespace_ChipConfig, "op-device-ca-certs" };
69 const PosixConfig::Key PosixConfig::kConfigKey_OperationalDevicePrivateKey = { kConfigNamespace_ChipConfig, "op-device-key" };
71 // Prefix used for NVS keys that contain Chip group encryption keys.
72 const char PosixConfig::kGroupKeyNamePrefix[] = "gk-";
74 CHIP_ERROR PosixConfig::Init()
76 CHIP_ERROR err = CHIP_NO_ERROR;
80 CHIP_ERROR PosixConfig::ReadConfigValue(Key key, bool & val)
82 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
89 CHIP_ERROR PosixConfig::ReadConfigValue(Key key, uint32_t & val)
91 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
98 CHIP_ERROR PosixConfig::ReadConfigValue(Key key, uint64_t & val)
100 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
107 CHIP_ERROR PosixConfig::ReadConfigValueStr(Key key, char * buf, size_t bufSize, size_t & outLen)
109 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
116 CHIP_ERROR PosixConfig::ReadConfigValueBin(Key key, uint8_t * buf, size_t bufSize, size_t & outLen)
118 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
125 CHIP_ERROR PosixConfig::WriteConfigValue(Key key, bool val)
127 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
134 CHIP_ERROR PosixConfig::WriteConfigValue(Key key, uint32_t val)
136 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
143 CHIP_ERROR PosixConfig::WriteConfigValue(Key key, uint64_t val)
145 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
152 CHIP_ERROR PosixConfig::WriteConfigValueStr(Key key, const char * str)
154 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
161 CHIP_ERROR PosixConfig::WriteConfigValueStr(Key key, const char * str, size_t strLen)
163 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
170 CHIP_ERROR PosixConfig::WriteConfigValueBin(Key key, const uint8_t * data, size_t dataLen)
172 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
179 CHIP_ERROR PosixConfig::ClearConfigValue(Key key)
181 CHIP_ERROR err = CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
188 bool PosixConfig::ConfigValueExists(Key key)
193 CHIP_ERROR PosixConfig::EnsureNamespace(const char * ns)
195 CHIP_ERROR err = CHIP_ERROR_PERSISTED_STORAGE_FAILED;
202 CHIP_ERROR PosixConfig::ClearNamespace(const char * ns)
204 CHIP_ERROR err = CHIP_ERROR_PERSISTED_STORAGE_FAILED;
211 CHIP_ERROR PosixConfig::FactoryResetConfig(void)
213 CHIP_ERROR err = CHIP_ERROR_PERSISTED_STORAGE_FAILED;
220 void PosixConfig::RunConfigUnitTest() {}
222 } // namespace Internal
223 } // namespace DeviceLayer