From 23f5d09d66972b32d99cfd045df48121cd574f59 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Sun, 29 Nov 2020 20:02:17 -0800 Subject: [PATCH] [dataset] set key rotation time in security policy on random generation (#5877) This commit updates `Dataset::Info::GenerateRandom()` to set the Key Rotation Time in Security Policy component on a Dataset using the default value (from `KeyManager`). This addresses the issue where the generated Operational Dataset could potentially use zero for Key Rotation time. This commit also changes Security Policy Flags to use default value from `KeyManager`. --- src/core/meshcop/dataset.cpp | 11 ++++++----- src/core/thread/key_manager.cpp | 2 +- src/core/thread/key_manager.hpp | 11 ++++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/core/meshcop/dataset.cpp b/src/core/meshcop/dataset.cpp index 9b561c6f2..f66adfc53 100644 --- a/src/core/meshcop/dataset.cpp +++ b/src/core/meshcop/dataset.cpp @@ -67,11 +67,12 @@ otError Dataset::Info::GenerateRandom(Instance &aInstance) Clear(); - mActiveTimestamp = 1; - mChannel = preferredChannels.ChooseRandomChannel(); - mChannelMask = supportedChannels.GetMask(); - mSecurityPolicy.mFlags = aInstance.Get().GetSecurityPolicyFlags(); - mPanId = Mac::GenerateRandomPanId(); + mActiveTimestamp = 1; + mChannel = preferredChannels.ChooseRandomChannel(); + mChannelMask = supportedChannels.GetMask(); + mSecurityPolicy.mRotationTime = KeyManager::kDefaultKeyRotationTime; + mSecurityPolicy.mFlags = KeyManager::kDefaultSecurityPolicyFlags; + mPanId = Mac::GenerateRandomPanId(); SuccessOrExit(error = static_cast(mMasterKey).GenerateRandom()); SuccessOrExit(error = static_cast(mPskc).GenerateRandom()); diff --git a/src/core/thread/key_manager.cpp b/src/core/thread/key_manager.cpp index 5442b5f07..bbb5a3633 100644 --- a/src/core/thread/key_manager.cpp +++ b/src/core/thread/key_manager.cpp @@ -78,7 +78,7 @@ KeyManager::KeyManager(Instance &aInstance) , mKeySwitchGuardEnabled(false) , mKeyRotationTimer(aInstance, KeyManager::HandleKeyRotationTimer, this) , mKekFrameCounter(0) - , mSecurityPolicyFlags(0xff) + , mSecurityPolicyFlags(kDefaultSecurityPolicyFlags) , mIsPskcSet(false) { mMasterKey = static_cast(kDefaultMasterKey); diff --git a/src/core/thread/key_manager.hpp b/src/core/thread/key_manager.hpp index 7528d9e24..fefebbe11 100644 --- a/src/core/thread/key_manager.hpp +++ b/src/core/thread/key_manager.hpp @@ -115,6 +115,16 @@ typedef Mac::Key Kek; class KeyManager : public InstanceLocator, private NonCopyable { public: + enum : uint16_t + { + kDefaultKeyRotationTime = 672, ///< Default Key Rotation Time (in unit of hours). + }; + + enum : uint8_t + { + kDefaultSecurityPolicyFlags = 0xff, ///< Default Security Policy Flags. + }; + /** * This constructor initializes the object. * @@ -448,7 +458,6 @@ private: enum { kMinKeyRotationTime = 1, - kDefaultKeyRotationTime = 672, kDefaultKeySwitchGuardTime = 624, kOneHourIntervalInMsec = 3600u * 1000u, };