*/\r
TEE_Result PropertyUtility::convertToUUID(const PropertyValue& in,\r
TEE_UUID& out) {\r
- TEE_UUID uuid;\r
- TEE_Result returnValue = TEE_SUCCESS;\r
- if ("uuid" == in.type) {\r
- // Split UUID string into tokens\r
+ if ("uuid" != in.type)\r
+ return TEE_ERROR_BAD_FORMAT;\r
+ try {\r
string text = in.value;\r
-\r
- string tokensString[8];\r
- int i = 0;\r
- for (i = 0; i < 8; i++) {\r
- tokensString[i] = text.substr(4*i, 4);\r
+ out.timeLow = std::stoul(text.substr(0, 8), nullptr, 16);\r
+ out.timeMid = std::stoul(text.substr(8, 4), nullptr, 16);\r
+ out.timeHiAndVersion = std::stoul(text.substr(12, 4), nullptr, 16);\r
+ string clockSeqStr = text.substr(16,16);\r
+ for (int i = 0; i < 8; i++) {\r
+ out.clockSeqAndNode[i] = std::stoul(clockSeqStr.substr(i * 2, 2),\r
+ nullptr, 16);\r
}\r
- // convert each token\r
- sscanf((tokensString[0] + tokensString[1]).c_str(), "%8x", &uuid.timeLow);\r
- sscanf(tokensString[2].c_str(), "%4hx", &uuid.timeMid);\r
- sscanf(tokensString[3].c_str(), "%4hx", &uuid.timeHiAndVersion);\r
- uint64_t clockSeq;\r
- string clockSeqStr = tokensString[4] + tokensString[5] + tokensString[6]\r
- + tokensString[7];\r
- clockSeq = std::stoll(clockSeqStr);\r
- memcpy(uuid.clockSeqAndNode, &clockSeq, sizeof(uint64_t));\r
- // Change endian-ness\r
- uint8_t temp[4];\r
- temp[0] = uuid.clockSeqAndNode[0];\r
- temp[1] = uuid.clockSeqAndNode[1];\r
- temp[2] = uuid.clockSeqAndNode[2];\r
- temp[3] = uuid.clockSeqAndNode[3];\r
- uuid.clockSeqAndNode[0] = uuid.clockSeqAndNode[7];\r
- uuid.clockSeqAndNode[1] = uuid.clockSeqAndNode[6];\r
- uuid.clockSeqAndNode[2] = uuid.clockSeqAndNode[5];\r
- uuid.clockSeqAndNode[3] = uuid.clockSeqAndNode[4];\r
- uuid.clockSeqAndNode[4] = temp[3];\r
- uuid.clockSeqAndNode[5] = temp[2];\r
- uuid.clockSeqAndNode[6] = temp[1];\r
- uuid.clockSeqAndNode[7] = temp[0];\r
- out = uuid;\r
+ } catch (std::invalid_argument) {\r
+ return TEE_ERROR_BAD_FORMAT;\r
+ } catch (std::out_of_range) {\r
+ return TEE_ERROR_BAD_FORMAT;\r
}\r
- else returnValue = TEE_ERROR_BAD_FORMAT;\r
- return returnValue;\r
+ return TEE_SUCCESS;\r
}\r
\r
// TODO: If UUID exists need to append that to identity\r