X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fsecurity%2Fprovisioning%2Fsrc%2Foxmrandompin.c;h=4efc23884cebb2975c1586a1863c86cff65e237c;hb=390866079e285d2c74918432c0d597d5da52f8a0;hp=8e9ad1e975b6e17b95a807e5adbc1d8721dbde11;hpb=3e9402ad71cb3e93266a77796f44d17bab9853fd;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/security/provisioning/src/oxmrandompin.c b/resource/csdk/security/provisioning/src/oxmrandompin.c index 8e9ad1e..4efc238 100644 --- a/resource/csdk/security/provisioning/src/oxmrandompin.c +++ b/resource/csdk/security/provisioning/src/oxmrandompin.c @@ -38,49 +38,42 @@ #define TAG "OXM_RandomPIN" -char* CreatePinBasedSelectOxmPayload(OTMContext_t* otmCtx) +OCStackResult CreatePinBasedSelectOxmPayload(OTMContext_t* otmCtx, uint8_t **payload, size_t *size) { - if(!otmCtx || !otmCtx->selectedDeviceInfo) + if(!otmCtx || !otmCtx->selectedDeviceInfo || !payload || *payload || !size) { - return NULL; + return OC_STACK_INVALID_PARAM; } otmCtx->selectedDeviceInfo->doxm->oxmSel = OIC_RANDOM_DEVICE_PIN; - OicUuid_t uuidPT = {.id={0}}; - if (OC_STACK_OK != GetDoxmDeviceID(&uuidPT)) - { - OC_LOG(ERROR, TAG, "Error while retrieving provisioning tool's device ID"); - return NULL; - } - memcpy(otmCtx->selectedDeviceInfo->doxm->owner.id, uuidPT.id, UUID_LENGTH); - - return BinToDoxmJSON(otmCtx->selectedDeviceInfo->doxm); + return DoxmToCBORPayload(otmCtx->selectedDeviceInfo->doxm, payload, size); } -char* CreatePinBasedOwnerTransferPayload(OTMContext_t* otmCtx) +OCStackResult CreatePinBasedOwnerTransferPayload(OTMContext_t* otmCtx, uint8_t **payload, size_t *size) { - if(!otmCtx || !otmCtx->selectedDeviceInfo) + if(!otmCtx || !otmCtx->selectedDeviceInfo || !payload || *payload || !size) { - return NULL; + return OC_STACK_INVALID_PARAM; } OicUuid_t uuidPT = {.id={0}}; + *payload = NULL; + *size = 0; if (OC_STACK_OK != GetDoxmDeviceID(&uuidPT)) { - OC_LOG(ERROR, TAG, "Error while retrieving provisioning tool's device ID"); - return NULL; + OIC_LOG(ERROR, TAG, "Error while retrieving provisioning tool's device ID"); + return OC_STACK_ERROR; } memcpy(otmCtx->selectedDeviceInfo->doxm->owner.id, uuidPT.id , UUID_LENGTH); - otmCtx->selectedDeviceInfo->doxm->owned = true; - return BinToDoxmJSON(otmCtx->selectedDeviceInfo->doxm); + return DoxmToCBORPayload(otmCtx->selectedDeviceInfo->doxm, payload, size); } -OCStackResult InputPinCodeCallback(OTMContext_t* otmCtx) +OCStackResult InputPinCodeCallback(OTMContext_t *otmCtx) { - if(!otmCtx || !otmCtx->selectedDeviceInfo) + if (!otmCtx || !otmCtx->selectedDeviceInfo) { return OC_STACK_INVALID_PARAM; } @@ -88,36 +81,34 @@ OCStackResult InputPinCodeCallback(OTMContext_t* otmCtx) uint8_t pinData[OXM_RANDOM_PIN_SIZE + 1]; OCStackResult res = InputPin((char*)pinData, OXM_RANDOM_PIN_SIZE + 1); - if(OC_STACK_OK != res) + if (OC_STACK_OK != res) { - OC_LOG(ERROR, TAG, "Failed to input PIN"); + OIC_LOG(ERROR, TAG, "Failed to input PIN"); return res; } - OicUuid_t deviceUUID = {.id={0}}; - if (OC_STACK_OK != GetDoxmDeviceID(&deviceUUID)) + /** + * Since PSK will be used directly while PIN based ownership transfer, + * Credential should not be saved into SVR. + * For this reason, We will use a temporary get_psk_info callback to random PIN OxM. + */ + if(CA_STATUS_OK != CARegisterDTLSCredentialsHandler(GetDtlsPskForRandomPinOxm)) { - OC_LOG(ERROR, TAG, "Error while retrieving provisioning tool's device ID"); - return OC_STACK_ERROR; + OIC_LOG(ERROR, TAG, "Failed to register DTLS credentials handler for random PIN OxM."); + res = OC_STACK_ERROR; } - res = AddTmpPskWithPIN(&otmCtx->selectedDeviceInfo->doxm->deviceID, - SYMMETRIC_PAIR_WISE_KEY, - (char*)pinData, OXM_RANDOM_PIN_SIZE, - 1, &deviceUUID, &otmCtx->subIdForPinOxm); - if(res != OC_STACK_OK) - { - OC_LOG_V(ERROR, TAG, "Failed to save the temporal PSK : %d", res); - } + //Set the device id to derive temporal PSK + SetUuidForRandomPinOxm(&(otmCtx->selectedDeviceInfo->doxm->deviceID)); return res; } -OCStackResult CreateSecureSessionRandomPinCallbak(OTMContext_t* otmCtx) +OCStackResult CreateSecureSessionRandomPinCallback(OTMContext_t* otmCtx) { - OC_LOG(INFO, TAG, "IN CreateSecureSessionRandomPinCallbak"); + OIC_LOG(INFO, TAG, "IN CreateSecureSessionRandomPinCallbak"); - if(!otmCtx || !otmCtx->selectedDeviceInfo) + if (!otmCtx || !otmCtx->selectedDeviceInfo) { return OC_STACK_INVALID_PARAM; } @@ -125,23 +116,22 @@ OCStackResult CreateSecureSessionRandomPinCallbak(OTMContext_t* otmCtx) CAResult_t caresult = CAEnableAnonECDHCipherSuite(false); if (CA_STATUS_OK != caresult) { - OC_LOG_V(ERROR, TAG, "Unable to disable anon cipher suite"); + OIC_LOG_V(ERROR, TAG, "Unable to disable anon cipher suite"); return OC_STACK_ERROR; } - OC_LOG(INFO, TAG, "Anonymous cipher suite disabled."); + OIC_LOG(INFO, TAG, "Anonymous cipher suite disabled."); caresult = CASelectCipherSuite(TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256); if (CA_STATUS_OK != caresult) { - OC_LOG_V(ERROR, TAG, "Failed to select TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256"); + OIC_LOG_V(ERROR, TAG, "Failed to select TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256"); return OC_STACK_ERROR; } - OC_LOG(INFO, TAG, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256 cipher suite selected."); - + OIC_LOG(INFO, TAG, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256 cipher suite selected."); OCProvisionDev_t* selDevInfo = otmCtx->selectedDeviceInfo; CAEndpoint_t *endpoint = (CAEndpoint_t *)OICCalloc(1, sizeof (CAEndpoint_t)); - if(NULL == endpoint) + if (NULL == endpoint) { return OC_STACK_NO_MEMORY; } @@ -151,11 +141,11 @@ OCStackResult CreateSecureSessionRandomPinCallbak(OTMContext_t* otmCtx) OICFree(endpoint); if (CA_STATUS_OK != caresult) { - OC_LOG_V(ERROR, TAG, "DTLS handshake failure."); + OIC_LOG_V(ERROR, TAG, "DTLS handshake failure."); return OC_STACK_ERROR; } - OC_LOG(INFO, TAG, "OUT CreateSecureSessionRandomPinCallbak"); + OIC_LOG(INFO, TAG, "OUT CreateSecureSessionRandomPinCallbak"); return OC_STACK_OK; }