Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 512f751f authored by Michael Ryleev's avatar Michael Ryleev Committed by android-build-merger
Browse files

Merge "trusty: keymaster3: Modify TrustyKeymaster3Device::update method"

am: bd9751a3

Change-Id: Idc19ec446ac917d9ade0fa663b53c0cb8aaf70ec
parents 6d3d70f4 bd9751a3
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <cutils/log.h>
#include <keymaster/android_keymaster_messages.h>
#include <trusty_keymaster/TrustyKeymaster3Device.h>
#include <trusty_keymaster/ipc/trusty_keymaster_ipc.h>

using ::keymaster::AbortOperationRequest;
using ::keymaster::AbortOperationResponse;
@@ -393,21 +394,33 @@ Return<void> TrustyKeymaster3Device::update(uint64_t operationHandle,
                                            const hidl_vec<KeyParameter>& inParams,
                                            const hidl_vec<uint8_t>& input, update_cb _hidl_cb) {
    UpdateOperationRequest request;
    UpdateOperationResponse response;
    hidl_vec<KeyParameter> resultParams;
    hidl_vec<uint8_t> resultBlob;
    uint32_t resultConsumed = 0;

    request.op_handle = operationHandle;
    request.input.Reinitialize(input.data(), input.size());
    request.additional_params.Reinitialize(KmParamSet(inParams));

    UpdateOperationResponse response;
    size_t inp_size = input.size();
    size_t ser_size = request.SerializedSize();

    if (ser_size > TRUSTY_KEYMASTER_SEND_BUF_SIZE) {
        response.error = KM_ERROR_INVALID_INPUT_LENGTH;
    } else {
        if (ser_size + inp_size > TRUSTY_KEYMASTER_SEND_BUF_SIZE) {
            inp_size = TRUSTY_KEYMASTER_SEND_BUF_SIZE - ser_size;
        }
        request.input.Reinitialize(input.data(), inp_size);

        impl_->UpdateOperation(request, &response);

    uint32_t resultConsumed = 0;
    hidl_vec<KeyParameter> resultParams;
    hidl_vec<uint8_t> resultBlob;
        if (response.error == KM_ERROR_OK) {
            resultConsumed = response.input_consumed;
            resultParams = kmParamSet2Hidl(response.output_params);
            resultBlob = kmBuffer2hidlVec(response.output);
        }
    }
    _hidl_cb(legacy_enum_conversion(response.error), resultConsumed, resultParams, resultBlob);
    return Void();
}