rust learning of today: to avoid integer overflows when summing up lengths, always use checked_add in such situations :-)
E.g., this is wrong:
let total_body_len =
handle_area_size + parameter_area_size_field_len + param_area_size + sessions_len;
And this is right:
let total_body_len = handle_area_size
.checked_add(parameter_area_size_field_len)
.and_then(|len| len.checked_add(param_area_size))
.and_then(|len| len.checked_add(sessions_len))
.ok_or(TpmProtocolError::IntegerTooLarge)?;