From f92be97bf23e55999a801e250b39eca76c0a71af Mon Sep 17 00:00:00 2001 From: Martin Turon Date: Wed, 23 Jun 2021 18:21:19 -0700 Subject: [PATCH] [msg] Reorder header bits to match spec. --- src/transport/SecureMessageCodec.cpp | 2 +- src/transport/SecureSessionMgr.cpp | 2 +- src/transport/raw/MessageHeader.cpp | 18 ++++++------------ src/transport/raw/MessageHeader.h | 17 +++++++++-------- 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/transport/SecureMessageCodec.cpp b/src/transport/SecureMessageCodec.cpp index 1e44b57ee262b5..ff3481fcc66572 100644 --- a/src/transport/SecureMessageCodec.cpp +++ b/src/transport/SecureMessageCodec.cpp @@ -58,7 +58,7 @@ CHIP_ERROR Encode(NodeId localNodeId, Transport::PeerConnectionState * state, Pa packetHeader.SetDestinationNodeId(state->GetPeerNodeId()); } - packetHeader.GetFlags().Set(Header::FlagValues::kSecure); + packetHeader.GetFlags().Set(Header::FlagValues::kEncryptedMessage); ReturnErrorOnFailure(payloadHeader.EncodeBeforeData(msgBuf)); diff --git a/src/transport/SecureSessionMgr.cpp b/src/transport/SecureSessionMgr.cpp index b13e23670ce4a5..3b599332d5752e 100644 --- a/src/transport/SecureSessionMgr.cpp +++ b/src/transport/SecureSessionMgr.cpp @@ -315,7 +315,7 @@ void SecureSessionMgr::OnMessageReceived(const PeerAddress & peerAddress, System ReturnOnFailure(packetHeader.DecodeAndConsume(msg)); - if (packetHeader.GetFlags().Has(Header::FlagValues::kSecure)) + if (packetHeader.GetFlags().Has(Header::FlagValues::kEncryptedMessage)) { SecureMessageDispatch(packetHeader, peerAddress, std::move(msg)); } diff --git a/src/transport/raw/MessageHeader.cpp b/src/transport/raw/MessageHeader.cpp index a94fadf2fe7914..fc3e312715c444 100644 --- a/src/transport/raw/MessageHeader.cpp +++ b/src/transport/raw/MessageHeader.cpp @@ -78,14 +78,14 @@ constexpr size_t kVendorIdSizeBytes = 2; constexpr size_t kAckIdSizeBytes = 4; /// Mask to extract just the version part from a 16bit header prefix. -constexpr uint16_t kVersionMask = 0xF000; +constexpr uint16_t kVersionMask = 0x00F0; /// Shift to convert to/from a masked version 16bit value to a 4bit version. -constexpr int kVersionShift = 12; +constexpr int kVersionShift = 4; /// Mask to extract just the encryption type part from a 16bit header prefix. -constexpr uint16_t kEncryptionTypeMask = 0xF0; -/// Shift to convert to/from a masked encryption type 16bit value to a 4bit encryption type. -constexpr int kEncryptionTypeShift = 4; +constexpr uint16_t kEncryptionTypeMask = 0x3000; +/// Shift to convert to/from a masked encryption type 16bit value to a 2bit encryption type. +constexpr int kEncryptionTypeShift = 12; } // namespace @@ -131,12 +131,6 @@ uint16_t MessageAuthenticationCode::TagLenForEncryptionType(Header::EncryptionTy { switch (encType) { - case Header::EncryptionType::kAESCCMTagLen8: - return 8; - - case Header::EncryptionType::kAESCCMTagLen12: - return 12; - case Header::EncryptionType::kAESCCMTagLen16: return 16; @@ -158,8 +152,8 @@ CHIP_ERROR PacketHeader::Decode(const uint8_t * const data, uint16_t size, uint1 version = ((header & kVersionMask) >> kVersionShift); VerifyOrExit(version == kHeaderVersion, err = CHIP_ERROR_VERSION_MISMATCH); + mFlags.SetRaw(header); mEncryptionType = static_cast((header & kEncryptionTypeMask) >> kEncryptionTypeShift); - mFlags.SetRaw(header & Header::kFlagsMask); err = reader.Read32(&mMessageId).StatusCode(); SuccessOrExit(err); diff --git a/src/transport/raw/MessageHeader.h b/src/transport/raw/MessageHeader.h index 4ec89c18dc6322..3a4809aabfdbd2 100644 --- a/src/transport/raw/MessageHeader.h +++ b/src/transport/raw/MessageHeader.h @@ -47,9 +47,8 @@ namespace Header { enum class EncryptionType { - kAESCCMTagLen8 = 0, - kAESCCMTagLen12 = 1, - kAESCCMTagLen16 = 2, + kEncryptionTypeNone = 0, + kAESCCMTagLen16 = 1, }; /** @@ -74,16 +73,19 @@ enum class ExFlagValues : uint8_t enum class FlagValues : uint16_t { /// Header flag specifying that a destination node id is included in the header. - kDestinationNodeIdPresent = 0x0100, + kDestinationNodeIdPresent = 0x0001, + + /// Header flag specifying that a destination group id is included in the header. + kDestinationGroupIdPresent = 0x0002, /// Header flag specifying that a source node id is included in the header. - kSourceNodeIdPresent = 0x0200, + kSourceNodeIdPresent = 0x0004, /// Header flag specifying that it is a control message for secure session. - kSecureSessionControlMessage = 0x0800, + kSecureSessionControlMessage = 0x4000, /// Header flag specifying that it is a encrypted message. - kSecure = 0x0001, + kEncryptedMessage = 0x0100, }; @@ -97,7 +99,6 @@ using ExFlags = BitFlags; // | | +---Encrypted // | +----------------Control message (TODO: Implement this) // +--------------------Privacy enhancements (TODO: Implement this) -static constexpr uint16_t kFlagsMask = 0x0F01; } // namespace Header