/* * Copyright (c) 2020 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 "SetupPayloadVerhoeff.h" #include "SetupPayloadParseCommand.h" #include #include #include using namespace ::chip; CHIP_ERROR SetupPayloadVerhoeffVerify::Run() { std::string codeString(mSetupCode); bool isQRCode = SetupPayloadParseCommand::IsQRCode(codeString); VerifyOrReturnError(codeString.length() > mPos && mPos >= 0, CHIP_ERROR_INVALID_STRING_LENGTH); VerifyOrReturnError(!isQRCode, CHIP_ERROR_NOT_IMPLEMENTED); ChipLogProgress(SetupPayload, "%s is %sVALID at position %u", codeString.c_str(), Verify(codeString) ? "" : "IN", mPos); return CHIP_NO_ERROR; } bool SetupPayloadVerhoeffVerify::Verify(std::string codeString) { char checkChar; bool result; checkChar = codeString.at(mPos); codeString.erase(mPos, mPos); ChipLogDetail(SetupPayload, "Verifying Manual Code: %s", codeString.c_str()); result = Verhoeff10::ValidateCheckChar(checkChar, codeString.c_str()); return result; } CHIP_ERROR SetupPayloadVerhoeffGenerate::Run() { std::string codeString(mSetupCode); char generatedChar; ReturnErrorOnFailure(GenerateChar(codeString, generatedChar)); ChipLogProgress(SetupPayload, "Generated Char: %c", generatedChar); return CHIP_NO_ERROR; } CHIP_ERROR SetupPayloadVerhoeffGenerate::GenerateChar(std::string codeString, char & generatedChar) { bool isQRCode = SetupPayloadParseCommand::IsQRCode(codeString); VerifyOrReturnError(!isQRCode, CHIP_ERROR_INVALID_ARGUMENT); ChipLogDetail(SetupPayload, "Generating Character for: %s", codeString.c_str()); generatedChar = Verhoeff10::ComputeCheckChar(codeString.c_str()); return CHIP_NO_ERROR; } //