in projects/web3/eth_wallet/ta/src/main.rs [144:167]
fn invoke_command(cmd_id: u32, params: &mut Parameters) -> optee_utee::Result<()> {
dbg_println!("[+] TA invoke command");
let mut p0 = unsafe { params.0.as_memref()? };
let mut p1 = unsafe { params.1.as_memref()? };
let mut p2 = unsafe { params.2.as_value()? };
let output_vec = match handle_invoke(Command::from(cmd_id), p0.buffer()) {
Ok(output) => output,
Err(e) => {
let err_message = format!("{:?}", e).as_bytes().to_vec();
p1.buffer()
.write(&err_message)
.map_err(|_| Error::new(ErrorKind::BadState))?;
p2.set_a(err_message.len() as u32);
return Err(Error::new(ErrorKind::BadParameters));
}
};
p1.buffer()
.write(&output_vec)
.map_err(|_| Error::new(ErrorKind::BadState))?;
p2.set_a(output_vec.len() as u32);
Ok(())
}