RPK API update
[platform/upstream/iotivity.git] / resource / csdk / security / provisioning / src / oxmrawpublickey.c
index 62a3be3..cda2011 100644 (file)
@@ -53,20 +53,24 @@ static RPKOxmData_t g_RPKOxmData = {
 
 static GetRPKMasterKeyCallback gGetRPKMasterKeyCallback = NULL;
 
-void SetInputRPKMasterKeyCB(GetRPKMasterKeyCallback rpkCB)
+OCStackResult SetRPKMasterKeyCB(GetRPKMasterKeyCallback rpkCB)
 {
     if(NULL == rpkCB)
     {
         OIC_LOG(ERROR, TAG, "Failed to set callback for rpk.");
-        return;
+        return OC_STACK_INVALID_PARAM;
     }
 
     gGetRPKMasterKeyCallback = rpkCB;
+
+    return OC_STACK_OK;
 }
 
-void UnsetRPKMasterKeyCB()
+OCStackResult UnsetRPKMasterKeyCB()
 {
     gGetRPKMasterKeyCallback = NULL;
+
+    return OC_STACK_OK;
 }
 
 OCStackResult CreateRPKBasedSelectOxmPayload(OTMContext_t* otmCtx, uint8_t **payload, size_t *size)
@@ -102,28 +106,31 @@ OCStackResult CreateRPKBasedOwnerTransferPayload(OTMContext_t* otmCtx, uint8_t *
     return DoxmToCBORPayload(otmCtx->selectedDeviceInfo->doxm, payload, size, true);
 }
 
-OCStackResult GetMasterRPK(char* master, size_t* master_len)
+OCStackResult GetMasterRPK()
 {
-    if(!master || !master_len)
-    {
-        OIC_LOG(ERROR, TAG, "RPK buffer is NULL");
-        return OC_STACK_INVALID_PARAM;
-    }
-
-    OIC_LOG(DEBUG, TAG, "Invoking gGetRPKMasterKeyCallback");
-    if(gGetRPKMasterKeyCallback)
+    if (gGetRPKMasterKeyCallback)
     {
-        gGetRPKMasterKeyCallback(g_RPKOxmData.rpkData, &g_RPKOxmData.rpkSize);
-        if (g_RPKOxmData.rpkSize > OXM_RPK_MASTER_KEY_MAX_SIZE)
+        OIC_LOG(DEBUG, TAG, "Invoking gGetRPKMasterKeyCallback");
+        char *rpkData = NULL;
+        size_t rpkSize = 0;
+        gGetRPKMasterKeyCallback(&rpkData, &rpkSize);
+        if (!rpkData)
+        {
+            OIC_LOG(ERROR, TAG, "RPK is NULL");
+            return OC_STACK_ERROR;
+        }
+        if (rpkSize > OXM_RPK_MASTER_KEY_MAX_SIZE)
         {
-            OIC_LOG(ERROR, TAG, "Buffer overflow: RPK master key must not exceed OXM_RPK_MASTER_KEY_MAX_SIZE");
+            OIC_LOG(ERROR, TAG, "RPK master key must not exceed OXM_RPK_MASTER_KEY_MAX_SIZE");
             return OC_STACK_ERROR;
         }
+        g_RPKOxmData.rpkSize = rpkSize;
+        memcpy(g_RPKOxmData.rpkData, rpkData, g_RPKOxmData.rpkSize);
     }
     else
     {
         OIC_LOG(ERROR, TAG, "Invoke RPK callback failed!");
-        OIC_LOG(ERROR, TAG, "Callback for input RPK should be registered to use Random RPK based OxM.");
+        OIC_LOG(ERROR, TAG, "Callback for input RPK master key should be registered to use RPK based OxM.");
         return OC_STACK_ERROR;
     }
 
@@ -217,11 +224,9 @@ OCStackResult GetMasterRPKCallback(OTMContext_t *otmCtx)
         return OC_STACK_INVALID_PARAM;
     }
 
-    uint8_t rpkData[OXM_RPK_MASTER_KEY_MAX_SIZE + 1] = {0};
-    size_t rpkLen = 0;
     OCStackResult res = OC_STACK_ERROR;
 
-    res = GetMasterRPK((char*)rpkData, &rpkLen);
+    res = GetMasterRPK();
 
     if (OC_STACK_OK != res)
     {