#include "oic_malloc.h"
#include "logger.h"
#include "pbkdf2.h"
-#include "global.h"
#include "base64.h"
#include "oxmrandompin.h"
#include "ownershiptransfermanager.h"
#include "pinoxmcommon.h"
+#include "oxmverifycommon.h"
-#define TAG "OXM_RandomPIN"
+#define TAG "OIC_OXM_RandomPIN"
+
+typedef enum PinState{
+ PIN_INPUT_READY = 0,
+ PIN_INPUT_WAIT = 1,
+ PIN_INPUT_SUCCESS = 2,
+ PIN_INPUT_FAIL = 3
+} PinState_t;
+
+static PinState_t gPinState = PIN_INPUT_READY;
OCStackResult CreatePinBasedSelectOxmPayload(OTMContext_t* otmCtx, uint8_t **payload, size_t *size)
{
}
uint8_t pinData[OXM_RANDOM_PIN_MAX_SIZE + 1] = {0};
+ OCStackResult res = OC_STACK_ERROR;
+
+ if (PIN_INPUT_WAIT == gPinState)
+ {
+ OIC_LOG(ERROR, TAG, "Pin input callback invoked already");
+ NotifyInputState();
+ SetResult(otmCtx, res);
+ return OC_STACK_NOT_ACCEPTABLE;
+ }
- OCStackResult res = InputPin((char*)pinData, sizeof(pinData));
+ gPinState = PIN_INPUT_WAIT;
+
+ res = InputPin((char*)pinData, sizeof(pinData));
if (OC_STACK_OK != res)
{
OIC_LOG(ERROR, TAG, "Failed to input PIN");
+ gPinState = PIN_INPUT_FAIL;
+ SetResult(otmCtx, res);
return res;
}
+ gPinState = PIN_INPUT_SUCCESS;
/**
* Since PSK will be used directly while PIN based ownership transfer,
res = OC_STACK_ERROR;
}
}
-#ifdef _ENABLE_MULTIPLE_OWNER_
+#ifdef MULTIPLE_OWNER
//in case of MOT
else if(otmCtx->selectedDeviceInfo->doxm->owned &&
otmCtx->selectedDeviceInfo->doxm->mom &&
res = OC_STACK_ERROR;
}
}
-#endif //_ENABLE_MULTIPLE_OWNER_
+#endif //MULTIPLE_OWNER
//Set the device id to derive temporal PSK
SetUuidForPinBasedOxm(&(otmCtx->selectedDeviceInfo->doxm->deviceID));
}
OIC_LOG(INFO, TAG, "Anonymous cipher suite disabled.");
- caresult = CASelectCipherSuite(TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256, otmCtx->selectedDeviceInfo->endpoint.adapter);
+ caresult = CASelectCipherSuite(MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, otmCtx->selectedDeviceInfo->endpoint.adapter);
if (CA_STATUS_OK != caresult)
{
- OIC_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_SHA256");
return OC_STACK_ERROR;
}
- OIC_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_SHA256 cipher suite selected.");
OCProvisionDev_t* selDevInfo = otmCtx->selectedDeviceInfo;
CAEndpoint_t endpoint;
endpoint.port = selDevInfo->securePort;
caresult = CAInitiateHandshake(&endpoint);
}
+ else if (CA_ADAPTER_GATT_BTLE == endpoint.adapter)
+ {
+ caresult = CAInitiateHandshake(&endpoint);
+ }
#ifdef __WITH_TLS__
else
{