}
// data_size should contain how much memory we actually took for our cipher operation
- out.resize(outData->data_size);
- memcpy(out.data(), outData->data, outData->data_size);
+ out.clear();
+ if (outData) {
+ out.resize(outData->data_size);
+ memcpy(out.data(), outData->data, outData->data_size);
+ }
}
void TrustZoneContext::executeEncryptAE(const RawBuffer &keyId,
ThrowErr(Exc::Crypto::InternalError, "Failed to deserialize tag data: ", ret);
}
- out.resize(outData->data_size);
- memcpy(out.data(), outData->data, outData->data_size);
+ out.clear();
+ if (outData) {
+ out.resize(outData->data_size);
+ memcpy(out.data(), outData->data, outData->data_size);
+ }
- if (tagData->data_size) {
+ tag.clear();
+ if (tagData && tagData->data_size) {
tag.resize(tagData->data_size);
memcpy(tag.data(), tagData->data, tagData->data_size);
}
ThrowErr(Exc::Crypto::InternalError, "Failed to deserialize output data: ", ret);
}
- out.resize(outData->data_size);
- memcpy(out.data(), outData->data, outData->data_size);
+ out.clear();
+ if (outData) {
+ out.resize(outData->data_size);
+ memcpy(out.data(), outData->data, outData->data_size);
+ }
}
void TrustZoneContext::executeSign(tz_algo_type algo,
KM_OutData* outData = nullptr;
ret = KM_ParamsDeserializeOutData(output, &outData);
- if (ret) {
+ if (ret || !outData || outData->data_size == 0) {
ThrowErr(Exc::Crypto::InternalError, "Failed to deserialize output data: ", ret);
}