From b76e524f7fad49ab905fdae8d655d072bdc4069e Mon Sep 17 00:00:00 2001 From: Eduardo Montoya Date: Mon, 9 May 2022 19:17:22 +0200 Subject: [PATCH] [crypto] make sure MAC keys are exportable (#7669) If MAC keys are not exportable their reference can't be used by the platform's radio implementation to retrieve the actual keys. --- src/core/config/platform.h | 10 ++++++++++ src/core/thread/key_manager.cpp | 6 +++--- src/core/thread/key_manager.hpp | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/core/config/platform.h b/src/core/config/platform.h index 83581fee7..ff47f11e4 100644 --- a/src/core/config/platform.h +++ b/src/core/config/platform.h @@ -148,6 +148,16 @@ #define OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE 0 #endif +/** + * @def OPENTHREAD_CONFIG_PLATFORM_MAC_KEYS_EXPORTABLE_ENABLE + * + * Define to 1 if you want to make MAC keys exportable. + * + */ +#ifndef OPENTHREAD_CONFIG_PLATFORM_MAC_KEYS_EXPORTABLE_ENABLE +#define OPENTHREAD_CONFIG_PLATFORM_MAC_KEYS_EXPORTABLE_ENABLE 0 +#endif + #if OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT #if (!defined(OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE) || \ !defined(OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MIN) || \ diff --git a/src/core/thread/key_manager.cpp b/src/core/thread/key_manager.cpp index 067a0ef5c..7563972ed 100644 --- a/src/core/thread/key_manager.cpp +++ b/src/core/thread/key_manager.cpp @@ -343,13 +343,13 @@ void KeyManager::UpdateKeyMaterial(void) Mac::KeyMaterial prevKey; Mac::KeyMaterial nextKey; - curKey.SetFrom(hashKeys.GetMacKey()); + curKey.SetFrom(hashKeys.GetMacKey(), kExportableMacKeys); ComputeKeys(mKeySequence - 1, hashKeys); - prevKey.SetFrom(hashKeys.GetMacKey()); + prevKey.SetFrom(hashKeys.GetMacKey(), kExportableMacKeys); ComputeKeys(mKeySequence + 1, hashKeys); - nextKey.SetFrom(hashKeys.GetMacKey()); + nextKey.SetFrom(hashKeys.GetMacKey(), kExportableMacKeys); Get().SetMacKey(Mac::Frame::kKeyIdMode1, (mKeySequence & 0x7f) + 1, prevKey, curKey, nextKey); } diff --git a/src/core/thread/key_manager.hpp b/src/core/thread/key_manager.hpp index c383a97f7..a8e2e32d8 100644 --- a/src/core/thread/key_manager.hpp +++ b/src/core/thread/key_manager.hpp @@ -551,6 +551,7 @@ public: private: static constexpr uint32_t kDefaultKeySwitchGuardTime = 624; static constexpr uint32_t kOneHourIntervalInMsec = 3600u * 1000u; + static constexpr bool kExportableMacKeys = OPENTHREAD_CONFIG_PLATFORM_MAC_KEYS_EXPORTABLE_ENABLE; OT_TOOL_PACKED_BEGIN struct Keys