1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16//! This crate defines the common constants. 17 18use asset_definition::{impl_enum_trait, log_throw_error, AssetError, ErrCode, Result}; 19mod calling_info; 20mod counter; 21mod process_info; 22pub use calling_info::CallingInfo; 23pub use counter::{AutoCounter, Counter}; 24pub use process_info::{ProcessInfo, ProcessInfoDetail}; 25/// success code. 26pub const SUCCESS: i32 = 0; 27/// root user upper bound 28pub const ROOT_USER_UPPERBOUND: u32 = 99; 29 30impl_enum_trait! { 31 /// The type of the calling. 32 #[repr(C)] 33 #[derive(PartialEq, Eq)] 34 #[derive(Copy, Clone)] 35 #[derive(Debug)] 36 pub enum OwnerType { 37 /// The calling is a application. 38 Hap = 0, 39 /// The calling is a native process. 40 Native = 1, 41 } 42} 43 44/// Transfer error code to AssetError 45pub fn transfer_error_code(err_code: ErrCode) -> AssetError { 46 match err_code { 47 ErrCode::AccessDenied => { 48 AssetError::new(ErrCode::AccessDenied, "[FATAL]HUKS verify auth token failed".to_string()) 49 }, 50 ErrCode::StatusMismatch => { 51 AssetError::new(ErrCode::StatusMismatch, "[FATAL]Screen status does not match".to_string()) 52 }, 53 ErrCode::InvalidArgument => AssetError::new(ErrCode::InvalidArgument, "[FATAL]Invalid argument.".to_string()), 54 ErrCode::BmsError => AssetError::new(ErrCode::BmsError, "[FATAL]Get owner info from bms failed.".to_string()), 55 ErrCode::AccessTokenError => { 56 AssetError::new(ErrCode::AccessTokenError, "[FATAL]Get process info failed.".to_string()) 57 }, 58 _ => AssetError::new(ErrCode::CryptoError, "[FATAL]HUKS execute crypt failed".to_string()), 59 } 60} 61 62extern "C" { 63 fn GetUserIdByUid(uid: u64, userId: &mut u32) -> bool; 64 fn IsUserIdExist(userId: i32, exist: &mut bool) -> bool; 65} 66 67/// Calculate user id. 68pub fn get_user_id(uid: u64) -> Result<u32> { 69 unsafe { 70 let mut user_id = 0; 71 if GetUserIdByUid(uid, &mut user_id) { 72 Ok(user_id) 73 } else { 74 log_throw_error!(ErrCode::AccountError, "[FATAL]Get user id failed.") 75 } 76 } 77} 78 79/// Check user id exist. 80pub fn is_user_id_exist(user_id: i32) -> Result<bool> { 81 unsafe { 82 let mut exist = false; 83 if IsUserIdExist(user_id, &mut exist) { 84 Ok(exist) 85 } else { 86 log_throw_error!(ErrCode::AccountError, "[FATAL]Check user id failed.") 87 } 88 } 89} 90