| /* |
| * |
| * 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 <crypto/CHIPCryptoPAL.h> |
| #include <lib/support/CodeUtils.h> |
| #include <lib/support/logging/CHIPLogging.h> |
| #include <platform/TestOnlyCommissionableDataProvider.h> |
| |
| #include "CommissionableInit.h" |
| |
| namespace chip { |
| namespace examples { |
| |
| using namespace chip::DeviceLayer; |
| |
| CHIP_ERROR InitCommissionableDataProvider(LinuxCommissionableDataProvider & provider, LinuxDeviceOptions & options) |
| { |
| chip::Optional<uint32_t> 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<unsigned>(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<unsigned>(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<unsigned>(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 |