/* * * Copyright (c) 2022 Project CHIP Authors * All rights reserved. * * 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. */ #include #include #include #include #include "CommissionableInit.h" namespace chip { namespace examples { using namespace chip::DeviceLayer; CHIP_ERROR InitCommissionableDataProvider(LinuxCommissionableDataProvider & provider, LinuxDeviceOptions & options) { chip::Optional setupPasscode; if (options.payload.setUpPINCode != 0) { setupPasscode.SetValue(options.payload.setUpPINCode); } else if (!options.spake2pVerifier.HasValue()) { uint32_t defaultTestPasscode = 0; chip::DeviceLayer::TestOnlyCommissionableDataProvider TestOnlyCommissionableDataProvider; VerifyOrDie(TestOnlyCommissionableDataProvider.GetSetupPasscode(defaultTestPasscode) == CHIP_NO_ERROR); ChipLogError(Support, "*** WARNING: Using temporary passcode %u due to no neither --passcode or --spake2p-verifier-base64 " "given on command line. This is temporary and will disappear. Please update your scripts " "to explicitly configure onboarding credentials. ***", static_cast(defaultTestPasscode)); setupPasscode.SetValue(defaultTestPasscode); options.payload.setUpPINCode = defaultTestPasscode; } else { // Passcode is 0, so will be ignored, and verifier will take over. Onboarding payload // printed for debug will be invalid, but if the onboarding payload had been given // properly to the commissioner later, PASE will succeed. } if (options.discriminator.HasValue()) { options.payload.discriminator.SetLongValue(options.discriminator.Value()); } else { uint16_t defaultTestDiscriminator = 0; chip::DeviceLayer::TestOnlyCommissionableDataProvider TestOnlyCommissionableDataProvider; VerifyOrDie(TestOnlyCommissionableDataProvider.GetSetupDiscriminator(defaultTestDiscriminator) == CHIP_NO_ERROR); ChipLogError(Support, "*** WARNING: Using temporary test discriminator %u due to --discriminator not " "given on command line. This is temporary and will disappear. Please update your scripts " "to explicitly configure discriminator. ***", static_cast(defaultTestDiscriminator)); options.payload.discriminator.SetLongValue(defaultTestDiscriminator); } // Default to minimum PBKDF iterations uint32_t spake2pIterationCount = chip::Crypto::kSpake2p_Min_PBKDF_Iterations; if (options.spake2pIterations != 0) { spake2pIterationCount = options.spake2pIterations; } ChipLogError(Support, "PASE PBKDF iterations set to %u", static_cast(spake2pIterationCount)); return provider.Init(options.spake2pVerifier, options.spake2pSalt, spake2pIterationCount, setupPasscode, options.payload.discriminator.GetLongValue()); } CHIP_ERROR InitConfigurationManager(ConfigurationManagerImpl & configManager, LinuxDeviceOptions & options) { if (options.payload.vendorID != 0) { configManager.StoreVendorId(options.payload.vendorID); } if (options.payload.productID != 0) { configManager.StoreProductId(options.payload.productID); } return CHIP_NO_ERROR; } } // namespace examples } // namespace chip