Untitled
unknown
plain_text
a year ago
2.1 kB
21
Indexable
case CMD_GENERATE_EC_SERVICE_KEY_V1 :
if (keyType == KEY_TYPE_NONE) {
keyType = KEY_TYPE_EC;
}
memcpy(&dataLen, inData + inDataLen - sizeof(uint32_t), sizeof(dataLen));
if (dataLen > inDataLen) {
LOGE("In data length is not proper - %d %d.", dataLen, inDataLen);
return ERR_TA_BUFFER_OVERFLOW;
}
pTlv = (Tlv_t *)inData;
if (pTlv->tag == KEYBLOB_TAG_TA_NAME) {
if ((tidLen = pTlv->dataLen) > MAX_TID_SIZE) {
LOGE("Invalid TID length: %d", tidLen);
return ERR_TA_INVALID_ARGUMENT;
}
pTlv = (Tlv_t *)(pTlv->data + pTlv->dataLen);
pos += tidLen;
}
if (pTlv->tag == KEYBLOB_TAG_ATTRS) {
attrsLen = pTlv->dataLen;
pAttrs = pTlv->data;
// Length validation for attrsLen
if (attrsLen == 0 || attrsLen > (dataLen - pos)) {
LOGE("Invalid attribute length: %d", attrsLen);
return ERR_TA_BUFFER_OVERFLOW;
}
if ((dataLen > attrsLen) && (pos < dataLen - attrsLen)) {
pTlv = (Tlv_t *)(pTlv->data + pTlv->dataLen);
pos += attrsLen;
} else {
LOGE("Inserted data is too big - %d %d", tidLen, attrsLen);
return ERR_TA_BUFFER_OVERFLOW;
}
}
// Ensure there is enough data for KeyInfo
if ((dataLen > sizeof(struct KeyInfo)) && (pos < dataLen - sizeof(struct KeyInfo))) {
pKeyInfo = (uint8_t *)pTlv;
pos += sizeof(struct KeyInfo);
memcpy(&wrappedKeyLenV1, inData + inDataLen - sizeof(uint32_t) * 2, sizeof(wrappedKeyLenV1));
if ((dataLen > wrappedKeyLenV1) && (pos < dataLen - wrappedKeyLenV1)) {
pWrappedKey = pKeyInfo + sizeof(struct KeyInfo);
LOGD("dataLen = %d, tidLen = %d, attrsLen = %d, drkKeyLen = %d", dataLen, tidLen, attrsLen, wrappedKeyLenV1);
ret = generateServiceKeyV1((struct KeyInfo *)pKeyInfo, pWrappedKey, wrappedKeyLenV1,
outData, outDataLen, pAttrs, attrsLen, keyType);
}
}
break;Editor is loading...
Leave a Comment