/* * * 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. */ /** * @file * The defines constants for the CHIP Secure Channel Protocol, present in * every CHIP device. * */ #pragma once #include #include #include /** * @namespace chip::Protocols::SecureChannel * * @brief * This namespace includes all interfaces within CHIP for the * CHIP SecureChannel protocol. * * The interfaces define message types and status codes. */ namespace chip { namespace Protocols { namespace SecureChannel { inline constexpr char kProtocolName[] = "SecureChannel"; /** * SecureChannel Protocol Message Types */ enum class MsgType : uint8_t { // Message Counter Synchronization Protocol Message Types MsgCounterSyncReq = 0x00, MsgCounterSyncRsp = 0x01, // Reliable Messaging Protocol Message Types StandaloneAck = 0x10, // Password-based session establishment Message Types PBKDFParamRequest = 0x20, PBKDFParamResponse = 0x21, PASE_Pake1 = 0x22, PASE_Pake2 = 0x23, PASE_Pake3 = 0x24, // Certificate-based session establishment Message Types CASE_Sigma1 = 0x30, CASE_Sigma2 = 0x31, CASE_Sigma3 = 0x32, CASE_Sigma2Resume = 0x33, StatusReport = 0x40, ICD_CheckIn = 0x50, }; // Placeholder value for the ProtocolCode field when the GeneralCode is Success or Continue. inline constexpr uint16_t kProtocolCodeSuccess = 0x0000; inline constexpr uint16_t kProtocolCodeNoSharedRoot = 0x0001; inline constexpr uint16_t kProtocolCodeInvalidParam = 0x0002; inline constexpr uint16_t kProtocolCodeCloseSession = 0x0003; inline constexpr uint16_t kProtocolCodeBusy = 0x0004; inline constexpr uint16_t kProtocolCodeSessionNotFound = 0x0005; // Placeholder value for the ProtocolCode field when there is no additional protocol-specific code to provide more information. inline constexpr uint16_t kProtocolCodeGeneralFailure = 0xFFFF; /** * Status Report - General Status Codes used to convey protocol-agnostic status info. */ enum class GeneralStatusCode : uint16_t { kSuccess = 0, /**< Operation completed successfully. */ kFailure = 1, /**< Generic failure, additional details may be included in the protocol specific status. */ kBadPrecondition = 2, /**< Operation was rejected by the system because the system is in an invalid state. */ kOutOfRange = 3, /**< A value was out of a required range. */ kBadRequest = 4, /**< A request was unrecognized or malformed. */ kUnsupported = 5, /**< An unrecognized or unsupported request was received. */ kUnexpected = 6, /**< A request was not expected at this time. */ kResourceExhausted = 7, /**< Insufficient resources to process the given request. */ kBusy = 8, /**< Device is busy and cannot handle this request at this time. */ kTimeout = 9, /**< A timeout occurred. */ kContinue = 10, /**< Context-specific signal to proceed. */ kAborted = 11, /**< Failure, often due to a concurrency error. */ kInvalidArgument = 12, /**< An invalid/unsupported argument was provided. */ kNotFound = 13, /**< Some requested entity was not found. */ kAlreadyExists = 14, /**< The caller attempted to create something that already exists. */ kPermissionDenied = 15, /**< Caller does not have sufficient permissions to execute the requested operations. */ kDataLoss = 16, /**< Unrecoverable data loss or corruption has occurred. */ }; /** * Status Report - Status Codes specific only to the SecureChannel Protocol */ enum class StatusCode { AlreadyMemberOfFabric = 1, /**< The recipient is already a member of a fabric. */ NotMemberOfFabric = 2, /**< The recipient is not a member of a fabric. */ InvalidFabricConfig = 3 /**< The specified fabric configuration was invalid. */ }; } // namespace SecureChannel template <> struct MessageTypeTraits { static constexpr const Protocols::Id & ProtocolId() { return SecureChannel::Id; } static auto GetTypeToNameTable() { static const std::array typeToNameTable = { { { SecureChannel::MsgType::MsgCounterSyncReq, "MsgCounterSyncReq" }, { SecureChannel::MsgType::MsgCounterSyncRsp, "MsgCounterSyncRsp" }, { SecureChannel::MsgType::StandaloneAck, "StandaloneAck" }, { SecureChannel::MsgType::PBKDFParamRequest, "PBKDFParamRequest" }, { SecureChannel::MsgType::PBKDFParamResponse, "PBKDFParamResponse" }, { SecureChannel::MsgType::PASE_Pake1, "PASE_Pake1" }, { SecureChannel::MsgType::PASE_Pake2, "PASE_Pake2" }, { SecureChannel::MsgType::PASE_Pake3, "PASE_Pake3" }, { SecureChannel::MsgType::CASE_Sigma1, "CASE_Sigma1" }, { SecureChannel::MsgType::CASE_Sigma2, "CASE_Sigma2" }, { SecureChannel::MsgType::CASE_Sigma3, "CASE_Sigma3" }, { SecureChannel::MsgType::CASE_Sigma2Resume, "CASE_Sigma2Resume" }, { SecureChannel::MsgType::StatusReport, "StatusReport" }, { SecureChannel::MsgType::ICD_CheckIn, "ICD_CheckInMessage" }, }, }; return &typeToNameTable; } }; } // namespace Protocols } // namespace chip