| /* |
| * Copyright (C) 2021 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #![no_std] |
| |
| use hwwsk::{HwWskReq, HWWSK_MAX_MSG_SIZE}; |
| use tipc::{Handle, Manager, PortCfg, Service, TipcError, Uuid}; |
| use trusty_std::{self, vec}; |
| |
| struct HwWskService; |
| |
| impl Service for HwWskService { |
| type Connection = (); |
| type Message = HwWskReq; |
| |
| fn on_connect( |
| &self, |
| _port: &PortCfg, |
| _handle: &Handle, |
| _peer: &Uuid, |
| ) -> Result<Option<()>, TipcError> { |
| /* |
| TODO: implement any nuance of extant hwwsk service |
| */ |
| Ok(Some(())) |
| } |
| |
| fn on_message( |
| &self, |
| _connection: &Self::Connection, |
| handle: &Handle, |
| msg: Self::Message, |
| ) -> Result<bool, TipcError> { |
| /* |
| TODO: this is a temporary placeholder for |
| a reference implementation of the hwwsk service. |
| |
| - parse incoming cmd |
| - generate, import, or export key depending on request |
| */ |
| let response = msg.response_from(0, vec![]); |
| handle.send(&response).map(|_| true) |
| } |
| } |
| |
| fn main() { |
| trusty_log::init(); |
| |
| let cfg = PortCfg::new("com.android.trusty.hwwsk") |
| .expect("Could not create port config") |
| .allow_ta_connect(); |
| |
| // TODO: determine if it's necessary for the non-secure world to connect |
| // .allow_ns_connect(); |
| |
| let service = HwWskService {}; |
| |
| let buffer = [0u8; HWWSK_MAX_MSG_SIZE as usize]; |
| Manager::<_, _, 1, 4>::new(service, cfg, buffer) |
| .expect("Could not create service manager") |
| .run_event_loop() |
| .expect("Hwwsk service quit unexpectedly"); |
| } |