From 7831f57922c9a328285cb0cfbc321eca38b6b080 Mon Sep 17 00:00:00 2001 From: "saurabh.s9" Date: Mon, 16 Jan 2017 17:25:05 +0530 Subject: [PATCH] Adding C++ wrapper and test case to set a seed value for UUID generation Change-Id: I14d20ce49b87741dfbef34631cb8f728f3c33b41 Signed-off-by: saurabh.s9 Reviewed-on: https://gerrit.iotivity.org/gerrit/16435 Tested-by: jenkins-iotivity Reviewed-by: Randeep Singh (cherry picked from commit d58a56bc2929f322b0997d2e6d52a8d2356192d2) Reviewed-on: https://gerrit.iotivity.org/gerrit/16713 --- resource/include/OCProvisioningManager.hpp | 8 ++++++++ .../provisioning/src/OCProvisioningManager.cpp | 24 ++++++++++++++++++++++ .../provisioning/unittests/OCProvisioningTest.cpp | 21 +++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/resource/include/OCProvisioningManager.hpp b/resource/include/OCProvisioningManager.hpp index f38ce50..730057b 100644 --- a/resource/include/OCProvisioningManager.hpp +++ b/resource/include/OCProvisioningManager.hpp @@ -521,6 +521,14 @@ namespace OC */ static void certCallbackWrapper(void* ctx, uint16_t credId, uint8_t *trustCertChain, size_t chainSize); + + /** + * Wrapper to save the seed value to generate device UUID + * + * @param[in] seed buffer of seed value + * @param[in] seedSize byte length of seed + */ + static OCStackResult setDeviceIdSeed(const uint8_t* seed, size_t seedSize); #endif // __WITH_DTLS__ || __WITH_TLS__ diff --git a/resource/provisioning/src/OCProvisioningManager.cpp b/resource/provisioning/src/OCProvisioningManager.cpp index d329f65..1e08a3c 100644 --- a/resource/provisioning/src/OCProvisioningManager.cpp +++ b/resource/provisioning/src/OCProvisioningManager.cpp @@ -988,6 +988,30 @@ namespace OC } return result; } + + OCStackResult OCSecure::setDeviceIdSeed(const uint8_t* seed, size_t seedSize) + { + if (!seed) + { + oclog() <<"seed can not be null"; + return OC_STACK_INVALID_PARAM; + } + + OCStackResult result; + auto cLock = OCPlatform_impl::Instance().csdkLock().lock(); + + if (cLock) + { + std::lock_guard lock(*cLock); + result = SetDeviceIdSeed(seed, seedSize); + } + else + { + oclog() <<"Mutex not found"; + result = OC_STACK_ERROR; + } + return result; + } #endif // __WITH_DTLS__ || __WITH_TLS__ void OCSecureResource::callbackWrapper(void* ctx, size_t nOfRes, OCProvisionResult_t *arr, bool hasError) diff --git a/resource/provisioning/unittests/OCProvisioningTest.cpp b/resource/provisioning/unittests/OCProvisioningTest.cpp index 61b4499..09086a1 100644 --- a/resource/provisioning/unittests/OCProvisioningTest.cpp +++ b/resource/provisioning/unittests/OCProvisioningTest.cpp @@ -250,4 +250,25 @@ namespace OCProvisioningTest OCSecureResource device; EXPECT_EQ(OC_STACK_INVALID_PARAM, device.provisionDirectPairing(nullptr, nullptr)); } +#if defined(__WITH_DTLS__) || defined(__WITH_TLS__) + TEST(setDeviceIdSeed, NullParam) + { + EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSecure::setDeviceIdSeed(NULL, 0)); + } + + TEST(setDeviceIdSeed, InvalidParam) + { + uint8_t seed[1024] = {0}; + + EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSecure::setDeviceIdSeed(seed, 0)); + EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSecure::setDeviceIdSeed(seed, sizeof(seed))); + } + + TEST(setDeviceIdSeed, ValidValue) + { + uint8_t seed[16] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10}; + EXPECT_EQ(OC_STACK_OK, OCSecure::setDeviceIdSeed(seed, sizeof(seed))); + } +#endif // __WITH_DTLS__ || __WITH_TLS__ } -- 2.7.4