// NOTE that this enum must match the gDoxmPropertyAccessModes
// table in doxmresource.c
typedef enum {
- DOXM_OXMTYPE = 0, // TODO [IOT-2105]
- DOXM_OXMS,
+ DOXM_OXMS = 1,
DOXM_OXMSEL,
DOXM_SCT,
DOXM_OWNED,
struct OicSecDoxm
{
// <Attribute ID>:<Read/Write>:<Multiple/Single>:<Mandatory?>:<Type>
- OicUrn_t *oxmType; // 0:R:M:N:URN TODO [IOT-2105]
- size_t oxmTypeLen; // the number of elts in OxmType
OicSecOxm_t *oxm; // 1:R:M:N:UINT16
size_t oxmLen; // the number of elts in Oxm
OicSecOxm_t oxmSel; // 2:R/W:S:Y:UINT16
#endif //MULTIPLE_OWNER
// We have to assign NULL for not necessary information to prevent memory corruption.
- newDoxm->oxmType = NULL;
- newDoxm->oxmTypeLen = 0;
newDoxm->oxm = NULL;
newDoxm->oxmLen = 0;
static OicSecOxm_t oicSecDoxmRandomPin = OIC_RANDOM_DEVICE_PIN;
static OicSecDoxm_t defaultDoxm1 =
{
- NULL, /* OicUrn_t *oxmType */
- 0, /* size_t oxmTypeLen */
&oicSecDoxmJustWorks, /* uint16_t *oxm */
1, /* size_t oxmLen */
OIC_JUST_WORKS, /* uint16_t oxmSel */
static OicSecDoxm_t defaultDoxm2 =
{
- NULL, /* OicUrn_t *oxmType */
- 0, /* size_t oxmTypeLen */
&oicSecDoxmRandomPin, /* uint16_t *oxm */
1, /* size_t oxmLen */
OIC_RANDOM_DEVICE_PIN, /* uint16_t oxmSel */
result->oxm[0] = OIC_JUST_WORKS;
result->oxmLen = 1U;
result->oxmSel = OIC_JUST_WORKS;
- result->oxmType = (OicUrn_t*)OICCalloc(1, sizeof(OicUrn_t));
- if (NULL == result->oxmType)
- {
- return NULL;
- }
- result->oxmType[0] = NULL;
- result->oxmTypeLen = 1U;
memcpy(&result->rownerID, &s_sampleOwnerId, sizeof(result->rownerID));
result->sct = NO_SECURITY_MODE;
EXPECT_FALSE(NULL == m_clonedStruct);
}
-TEST_F(CloneOicSecDoxmTest, copyShouldHaveNulledOxmType)
-{
- ASSERT_FALSE(NULL == m_originalStruct->oxmType);
-
- m_clonedStruct = CloneOicSecDoxm(m_originalStruct);
- EXPECT_TRUE(NULL == m_clonedStruct->oxmType);
-}
-
-TEST_F(CloneOicSecDoxmTest, copyShouldHaveZeroedOxmTypeLen)
-{
- ASSERT_NE(0U, m_originalStruct->oxmTypeLen);
-
- m_clonedStruct = CloneOicSecDoxm(m_originalStruct);
- EXPECT_EQ(0U, m_clonedStruct->oxmTypeLen);
-}
-
TEST_F(CloneOicSecDoxmTest, copyShouldHaveNulledOxm)
{
ASSERT_FALSE(NULL == m_originalStruct->oxm);
LL_FOREACH(gList,el){ ++cnt; };
EXPECT_TRUE(0 == cnt);
-}
\ No newline at end of file
+}
static unsigned short timeout = 60;
static OicSecDoxm_t defaultDoxm1 =
{
- NULL, /* OicUrn_t *oxmType */
- 0, /* size_t oxmTypeLen */
&oicSecDoxmJustWorks, /* uint16_t *oxm */
1, /* size_t oxmLen */
OIC_JUST_WORKS, /* uint16_t oxmSel */
static OicSecDoxm_t defaultDoxm2 =
{
- NULL, /* OicUrn_t *oxmType */
- 0, /* size_t oxmTypeLen */
&oicSecDoxmRandomPin, /* uint16_t *oxm */
1, /* size_t oxmLen */
OIC_RANDOM_DEVICE_PIN, /* uint16_t oxmSel */
static OicSecOxm_t gDoxmDefaultOxm = OIC_RANDOM_DEVICE_PIN;
static OicSecDoxm_t gDefaultDoxm =
{
- NULL, /* OicUrn_t *oxmType */
- 0, /* size_t oxmTypeLen */
&gDoxmDefaultOxm, /* uint16_t *oxm */
1, /* size_t oxmLen */
OIC_RANDOM_DEVICE_PIN, /* uint16_t oxmSel */
{
if (doxm)
{
- //Clean oxmType
- for (size_t i = 0; i < doxm->oxmTypeLen; i++)
- {
- OICFree(doxm->oxmType[i]);
- }
- OICFree(doxm->oxmType);
-
//clean oxm
OICFree(doxm->oxm);
cborEncoderResult = cbor_encoder_create_map(&encoder, &doxmMap, CborIndefiniteLength);
VERIFY_CBOR_SUCCESS(TAG, cborEncoderResult, "Failed Adding Doxm Map.");
- // oxmtype
- // TODO [IOT-2105]: resolve "oxmtype" undocumented tag/value
- if (propertiesToInclude[DOXM_OXMTYPE] && doxm->oxmTypeLen > 0)
- {
- OIC_LOG_V(DEBUG, TAG, "%s: including %s.", __func__, OIC_JSON_OXM_TYPE_NAME);
- CborEncoder oxmType;
- cborEncoderResult = cbor_encode_text_string(&doxmMap, OIC_JSON_OXM_TYPE_NAME,
- strlen(OIC_JSON_OXM_TYPE_NAME));
- VERIFY_CBOR_SUCCESS(TAG, cborEncoderResult, "Failed Adding oxmtype Tag.");
- cborEncoderResult = cbor_encoder_create_array(&doxmMap, &oxmType, doxm->oxmTypeLen);
- VERIFY_CBOR_SUCCESS(TAG, cborEncoderResult, "Failed Adding oxmtype Array.");
-
- for (size_t i = 0; i < doxm->oxmTypeLen; i++)
- {
- cborEncoderResult = cbor_encode_text_string(&oxmType, doxm->oxmType[i],
- strlen(doxm->oxmType[i]));
- VERIFY_CBOR_SUCCESS(TAG, cborEncoderResult, "Failed Adding oxmtype Value.");
- }
- cborEncoderResult = cbor_encoder_close_container(&doxmMap, &oxmType);
- VERIFY_CBOR_SUCCESS(TAG, cborEncoderResult, "Failed Closing oxmtype.");
- }
-
// oxms Property
if (propertiesToInclude[DOXM_OXMS] && doxm->oxmLen > 0)
{
allProps[i] = true;
}
- allProps[DOXM_OXMTYPE] = false; // TODO [IOT-2105]: resolve "oxmtype" undocumented tag/value
-
return DoxmToCBORPayloadPartial(doxm, payload, size, allProps);
}
OicSecDoxm_t *doxm = (OicSecDoxm_t *)OICCalloc(1, sizeof(*doxm));
VERIFY_NOT_NULL(TAG, doxm, ERROR);
- cborFindResult = cbor_value_map_find_value(&doxmCbor, OIC_JSON_OXM_TYPE_NAME, &doxmMap);
- // OxmType
- // TODO [IOT-2105]: resolve "oxmtype" undocumented tag/value
- if (CborNoError == cborFindResult && cbor_value_is_array(&doxmMap))
- {
- OIC_LOG(DEBUG, TAG, "Found doxm.oxmtype tag in doxmMap.");
-
- CborValue oxmType;
-
- cborFindResult = cbor_value_get_array_length(&doxmMap, &doxm->oxmTypeLen);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding oxmTypeLen.");
- VERIFY_SUCCESS(TAG, doxm->oxmTypeLen != 0, ERROR);
-
- doxm->oxmType = (OicUrn_t *)OICCalloc(doxm->oxmTypeLen, sizeof(*doxm->oxmType));
- VERIFY_NOT_NULL(TAG, doxm->oxmType, ERROR);
-
- cborFindResult = cbor_value_enter_container(&doxmMap, &oxmType);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Entering oxmType Array.")
-
- int i = 0;
- size_t oxmTypeStrlen = 0;
- while (cbor_value_is_valid(&oxmType) && cbor_value_is_text_string(&oxmType))
- {
- OIC_LOG_V(DEBUG, TAG, "Read doxm.oxmtype value = %s", oxmType);
- cborFindResult = cbor_value_dup_text_string(&oxmType, &doxm->oxmType[i++],
- &oxmTypeStrlen, NULL);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding omxType text string.");
- cborFindResult = cbor_value_advance(&oxmType);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Advancing oxmType.");
- }
- }
-
cborFindResult = cbor_value_map_find_value(&doxmCbor, OIC_JSON_OXMS_NAME, &doxmMap);
// oxms
return false;
}
- //Compare the contents of the oxmType array and its length oxmTypeLen.
- size_t arrayLength = doxm1->oxmTypeLen;
-
- if (arrayLength != doxm2->oxmTypeLen)
- {
- OIC_LOG_V(ERROR, TAG, "%s: oxmTypeLen mismatch: (%" PRIuPTR ", %" PRIuPTR ")",
- __func__, arrayLength, doxm2->oxmTypeLen);
- return false;
- }
-
- for (size_t i = 0; i < arrayLength; i++)
- {
- if (NULL == doxm1->oxmType[i] || NULL == doxm2->oxmType[i])
- {
- OIC_LOG_V(ERROR, TAG, "%s: unexpected NULL found in the oxmType array",
- __func__);
- return false;
- }
-
- if (0 != strcmp(doxm1->oxmType[i], doxm2->oxmType[i]))
- {
- OIC_LOG_V(ERROR, TAG, "%s: oxmType mismatch: (%s, %s)",
- __func__, doxm1->oxmType[i], doxm2->oxmType[i]);
- return false;
- }
- }
-
//Compare the contents of the oxm array and its length oxmLen.
- arrayLength = doxm1->oxmLen;
+ size_t arrayLength = doxm1->oxmLen;
if (arrayLength != doxm2->oxmLen)
{
{
if (doxm1->oxm[i] != doxm2->oxm[i])
{
- OIC_LOG_V(ERROR, TAG, "%s: oxmType mismatch: (%u, %u)",
+ OIC_LOG_V(ERROR, TAG, "%s: oxm mismatch: (%u, %u)",
__func__, (uint32_t)doxm1->oxm[i], (uint32_t)doxm2->oxm[i]);
return false;
}
#ifdef MULTIPLE_OWNER
const char * OIC_JSON_MOM_NAME = "x.org.iotivity.mom";
#endif //MULTIPLE_OWNER
-// TODO [IOT-2105]: resolve "oxmtype" undocumented tag/value
-const char * OIC_JSON_OXM_TYPE_NAME = "oxmtype"; // TODO [IOT-2105]
const char * OIC_JSON_OXM_SEL_NAME = "oxmsel";
const char * OIC_JSON_DEVICE_ID_FORMAT_NAME = "didformat";
const char * OIC_JSON_ISOP_NAME = "isop";
cJSON *jsonDoxm = NULL;
cJSON *jsonObj = NULL;
- size_t jsonObjLen = 0;
-
cJSON *jsonRoot = cJSON_Parse(jsonStr);
VERIFY_NOT_NULL(TAG, jsonRoot, ERROR);
doxm = (OicSecDoxm_t *)OICCalloc(1, sizeof(OicSecDoxm_t));
VERIFY_NOT_NULL(TAG, doxm, ERROR);
- //OxmType -- not Mandatory
- jsonObj = cJSON_GetObjectItem(jsonDoxm, OIC_JSON_OXM_TYPE_NAME);
- if ((jsonObj) && (cJSON_Array == jsonObj->type))
- {
- doxm->oxmTypeLen = cJSON_GetArraySize(jsonObj);
- VERIFY_SUCCESS(TAG, doxm->oxmTypeLen > 0, ERROR);
-
- doxm->oxmType = (OicUrn_t *)OICCalloc(doxm->oxmTypeLen, sizeof(char *));
- VERIFY_NOT_NULL(TAG, (doxm->oxmType), ERROR);
-
- for (size_t i = 0; i < doxm->oxmTypeLen ; i++)
- {
-// Needs to be removed once IOT-1746 is resolved.
-#ifdef _MSC_VER
-#pragma warning(suppress : 4267)
- cJSON *jsonOxmTy = cJSON_GetArrayItem(jsonObj, i);
-
-#else
- cJSON *jsonOxmTy = cJSON_GetArrayItem(jsonObj, i);
-
-#endif
- VERIFY_NOT_NULL(TAG, jsonOxmTy, ERROR);
-
- jsonObjLen = strlen(jsonOxmTy->valuestring) + 1;
- doxm->oxmType[i] = (char*)OICMalloc(jsonObjLen);
- VERIFY_NOT_NULL(TAG, doxm->oxmType[i], ERROR);
- strncpy((char *)doxm->oxmType[i], (char *)jsonOxmTy->valuestring, jsonObjLen);
- }
- }
-
//Oxm -- not Mandatory
jsonObj = cJSON_GetObjectItem(jsonDoxm, OIC_JSON_OXMS_NAME);
if (jsonObj && cJSON_Array == jsonObj->type)
{
return NULL;
}
- doxm->oxmTypeLen = 1;
- doxm->oxmType = (OicUrn_t *)OICCalloc(doxm->oxmTypeLen, sizeof(*doxm->oxmType));
- if (!doxm->oxmType)
- {
- OICFree(doxm);
- return NULL;
- }
- doxm->oxmType[0] = (char *) OICMalloc(strlen(OXM_JUST_WORKS) + 1);
- if (!doxm->oxmType[0])
- {
- OICFree(doxm->oxmType);
- OICFree(doxm);
- return NULL;
- }
- OICStrcpy(doxm->oxmType[0], strlen(OXM_JUST_WORKS) + 1, OXM_JUST_WORKS);
doxm->oxmLen = 1;
doxm->oxm = (OicSecOxm_t *)OICCalloc(doxm->oxmLen, sizeof(OicSecOxm_t));
if(!doxm->oxm)
{
- OICFree(doxm->oxmType[0]);
- OICFree(doxm->oxmType);
OICFree(doxm);
return NULL;
}
OicSecDoxm_t *doxmSec = NULL;
EXPECT_EQ(OC_STACK_OK, CBORPayloadToDoxm(payload, size, &doxmSec));
ASSERT_TRUE(doxmSec != NULL);
- // TODO [IOT-2105]: resolve "oxmtype" undocumented tag/value
- // EXPECT_EQ(doxmSec->oxmTypeLen, doxm->oxmTypeLen);
- // EXPECT_STREQ(doxmSec->oxmType[0], doxm->oxmType[0]);
- EXPECT_EQ(doxmSec->oxmLen, doxm->oxmLen);
EXPECT_EQ(doxmSec->oxm[0], doxm->oxm[0]);
EXPECT_EQ(doxmSec->oxmSel, doxm->oxmSel);
EXPECT_EQ(doxmSec->sct, doxm->sct);
typedef struct _DoxmTestParameter
{
- std::vector<std::string> m_oxmTypeArray;
std::vector<OicSecOxm_t> m_oxmArray;
OicSecOxm_t m_oxmSel;
OicSecCredType_t m_sct;
OicSecDoxm_t *newDoxmBin = (OicSecDoxm_t *)OICCalloc(1, sizeof(OicSecDoxm_t));
ASSERT_NE(nullptr, newDoxmBin);
- // oxmType and oxmTypeLen.
- size_t arrayLength = param.m_oxmTypeArray.size();
- if (arrayLength == 0)
- {
- newDoxmBin->oxmType = nullptr;
- }
- else
- {
- newDoxmBin->oxmType = (OicUrn_t *)OICCalloc(sizeof(OicUrn_t), arrayLength);
- ASSERT_NE(nullptr, newDoxmBin->oxmType);
-
- for (size_t i = 0; i < arrayLength; i++)
- {
- newDoxmBin->oxmType[i] = OICStrdup(param.m_oxmTypeArray[i].c_str());
- ASSERT_NE(nullptr, newDoxmBin->oxmType[i]);
- }
- }
- newDoxmBin->oxmTypeLen = arrayLength;
-
// oxm and oxmLen.
- arrayLength = param.m_oxmArray.size();
+ size_t arrayLength = param.m_oxmArray.size();
if (arrayLength == 0)
{
newDoxmBin->oxm = nullptr;
DoxmTestParameter param1 =
{
- {"oxmType1"},
{OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
DoxmTestParameter param1 =
{
- {"oxmType10"},
{OIC_RANDOM_DEVICE_PIN, OIC_JUST_WORKS},
OIC_RANDOM_DEVICE_PIN,
SYMMETRIC_PAIR_WISE_KEY,
DoxmTestParameter param1 =
{
- {"oxmType10", "oxmType20"},
{OIC_RANDOM_DEVICE_PIN, OIC_JUST_WORKS},
OIC_RANDOM_DEVICE_PIN,
SYMMETRIC_PAIR_WISE_KEY,
{
DoxmTestParameter param1 =
{
- {"oxmType100"},
{OIC_RANDOM_DEVICE_PIN, OIC_JUST_WORKS},
OIC_RANDOM_DEVICE_PIN,
SYMMETRIC_PAIR_WISE_KEY,
{
DoxmTestParameter param1 =
{
- {"oxmType100", "foo"},
{OIC_RANDOM_DEVICE_PIN, OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_GROUP_KEY,
{
DoxmTestParameter param1 =
{
- {"type", "bar", "Fred"},
{OIC_MANUFACTURER_CERTIFICATE},
OIC_JUST_WORKS,
SYMMETRIC_GROUP_KEY,
EXPECT_TRUE(AreDoxmBinPropertyValuesEqual(m_doxm1, m_doxm2));
}
-TEST_F(DoxmComparisonTests, oxmTypeMismatch)
-{
- DoxmTestParameter param1 =
- {
- {"type", "bar", "Fred"},
- {OIC_MANUFACTURER_CERTIFICATE},
- OIC_JUST_WORKS,
- SYMMETRIC_GROUP_KEY,
- false,
- {0}, // m_deviceID
- true,
- {0}, // m_owner
-
-#ifdef MULTIPLE_OWNER
- {},
- OIC_MULTIPLE_OWNER_ENABLE,
-#endif
- {0} // m_rownerID
- };
- GenerateDoxmTestParameterUUIDs(¶m1);
-
- DoxmTestParameter param2 = param1;
- param2.m_oxmTypeArray[1] = "foo";
-
- DoxmBinFromParameters(param1, param2);
-
- EXPECT_FALSE(AreDoxmBinPropertyValuesEqual(m_doxm1, m_doxm2));
-}
-
-TEST_F(DoxmComparisonTests, oxmTypeLenMismatch)
-{
- DoxmTestParameter param1 =
- {
- {"type1", "type2", "type3", "type4", "type5"},
- {OIC_MANUFACTURER_CERTIFICATE},
- OIC_JUST_WORKS,
- SYMMETRIC_GROUP_KEY,
- false,
- {0}, // m_deviceID
- true,
- {0}, // m_owner
-
-#ifdef MULTIPLE_OWNER
- {},
- OIC_MULTIPLE_OWNER_ENABLE,
-#endif
- {0} // m_rownerID
- };
- GenerateDoxmTestParameterUUIDs(¶m1);
-
- DoxmTestParameter param2 = param1;
- param2.m_oxmTypeArray.erase(param2.m_oxmTypeArray.begin());
-
- DoxmBinFromParameters(param1, param2);
-
- EXPECT_FALSE(AreDoxmBinPropertyValuesEqual(m_doxm1, m_doxm2));
-}
-
TEST_F(DoxmComparisonTests, oxmMismatch)
{
DoxmTestParameter param1 =
{
- {"test oxmtype"},
{OIC_MANUFACTURER_CERTIFICATE},
OIC_JUST_WORKS,
SYMMETRIC_GROUP_KEY,
{
DoxmTestParameter param1 =
{
- {"test oxmtype"},
{OIC_MANUFACTURER_CERTIFICATE},
OIC_JUST_WORKS,
SYMMETRIC_GROUP_KEY,
{
DoxmTestParameter param1 =
{
- {"oxmtype1"},
{OIC_MANUFACTURER_CERTIFICATE, OIC_JUST_WORKS, OIC_DECENTRALIZED_PUBLIC_KEY, OIC_RANDOM_DEVICE_PIN},
OIC_RANDOM_DEVICE_PIN,
SYMMETRIC_GROUP_KEY,
{
DoxmTestParameter param1 =
{
- {"oxmtype10000"},
{OIC_MANUFACTURER_CERTIFICATE, OIC_JUST_WORKS, OIC_DECENTRALIZED_PUBLIC_KEY, OIC_RANDOM_DEVICE_PIN},
OIC_RANDOM_DEVICE_PIN,
ASYMMETRIC_KEY,
{
DoxmTestParameter param1 =
{
- {"oxmtype10000"},
{OIC_MANUFACTURER_CERTIFICATE, OIC_JUST_WORKS, OIC_DECENTRALIZED_PUBLIC_KEY, OIC_RANDOM_DEVICE_PIN},
OIC_RANDOM_DEVICE_PIN,
ASYMMETRIC_KEY,
{
DoxmTestParameter param1 =
{
- {"Jack", "in", "The", "Box"},
{OIC_MANUFACTURER_CERTIFICATE, OIC_DECENTRALIZED_PUBLIC_KEY, OIC_RANDOM_DEVICE_PIN},
OIC_MANUFACTURER_CERTIFICATE,
PIN_PASSWORD,
{
DoxmTestParameter param1 =
{
- {"Jack", "in", "The", "Box"},
{OIC_MANUFACTURER_CERTIFICATE, OIC_DECENTRALIZED_PUBLIC_KEY, OIC_RANDOM_DEVICE_PIN},
OIC_MANUFACTURER_CERTIFICATE,
PIN_PASSWORD,
{
DoxmTestParameter param1 =
{
- {"dpcMismatch test"},
{OIC_RANDOM_DEVICE_PIN},
OIC_RANDOM_DEVICE_PIN,
PIN_PASSWORD,
{
DoxmTestParameter param1 =
{
- {"abc"},
{OIC_JUST_WORKS, OIC_RANDOM_DEVICE_PIN},
OIC_JUST_WORKS,
ASYMMETRIC_KEY,
DoxmTestParameter param1 =
{
- {"oxmType1"},
{OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
DoxmTestParameter param1 =
{
- {"oxmType1"},
{OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
DoxmTestParameter param1 =
{
- {"oxmType1"},
{OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
DoxmTestParameter param1 =
{
- {"oxmType1"},
{OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
DoxmTestParameter param1 =
{
- {"oxmType1"},
{OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
{
DoxmTestParameter param1 =
{
- { "oxmType1" },
- { OIC_JUST_WORKS },
+ {OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
false,
{
DoxmTestParameter param1 =
{
- { "oxmType1" },
- { OIC_JUST_WORKS },
+ {OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
false,
{
DoxmTestParameter param1 =
{
- { "oxmType1" },
- { OIC_JUST_WORKS },
+ {OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
false,
{
DoxmTestParameter param1 =
{
- { "oxmType1" },
- { OIC_JUST_WORKS },
+ {OIC_JUST_WORKS},
OIC_JUST_WORKS,
SYMMETRIC_PAIR_WISE_KEY,
false,