1*9860b763SAndroid Build Coastguard Worker // Copyright 2022, The Android Open Source Project 2*9860b763SAndroid Build Coastguard Worker // 3*9860b763SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*9860b763SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*9860b763SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*9860b763SAndroid Build Coastguard Worker // 7*9860b763SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*9860b763SAndroid Build Coastguard Worker // 9*9860b763SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*9860b763SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*9860b763SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9860b763SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*9860b763SAndroid Build Coastguard Worker // limitations under the License. 14*9860b763SAndroid Build Coastguard Worker 15*9860b763SAndroid Build Coastguard Worker //! Local types that are equivalent to those generated for the IRemotelyProvisionedComponent HAL 16*9860b763SAndroid Build Coastguard Worker //! interface 17*9860b763SAndroid Build Coastguard Worker 18*9860b763SAndroid Build Coastguard Worker use crate::{cbor_type_error, try_from_n, AsCborValue, CborError}; 19*9860b763SAndroid Build Coastguard Worker use alloc::{ 20*9860b763SAndroid Build Coastguard Worker format, 21*9860b763SAndroid Build Coastguard Worker string::{String, ToString}, 22*9860b763SAndroid Build Coastguard Worker vec::Vec, 23*9860b763SAndroid Build Coastguard Worker }; 24*9860b763SAndroid Build Coastguard Worker use enumn::N; 25*9860b763SAndroid Build Coastguard Worker use kmr_derive::AsCborValue; 26*9860b763SAndroid Build Coastguard Worker 27*9860b763SAndroid Build Coastguard Worker /// IRPC HAL Versions 28*9860b763SAndroid Build Coastguard Worker pub const IRPC_V2: i32 = 2; 29*9860b763SAndroid Build Coastguard Worker pub const IRPC_V3: i32 = 3; 30*9860b763SAndroid Build Coastguard Worker /// `AuthenticatedRequest` CDDL schema version 31*9860b763SAndroid Build Coastguard Worker pub const AUTH_REQ_SCHEMA_V1: i32 = 1; 32*9860b763SAndroid Build Coastguard Worker /// `CertificateType` for keymint 33*9860b763SAndroid Build Coastguard Worker pub const CERT_TYPE_KEYMINT: &str = "keymint"; 34*9860b763SAndroid Build Coastguard Worker 35*9860b763SAndroid Build Coastguard Worker /// Indication of whether RKP is operating in test mode. (Only relevant for RKP v1 and v2.) 36*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, PartialEq, Eq, Debug)] 37*9860b763SAndroid Build Coastguard Worker pub struct TestMode(pub bool); 38*9860b763SAndroid Build Coastguard Worker 39*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] 40*9860b763SAndroid Build Coastguard Worker #[repr(i32)] 41*9860b763SAndroid Build Coastguard Worker pub enum ErrorCode { 42*9860b763SAndroid Build Coastguard Worker Ok = 0, // not in HAL, assumed 43*9860b763SAndroid Build Coastguard Worker Failed = 1, 44*9860b763SAndroid Build Coastguard Worker InvalidMac = 2, 45*9860b763SAndroid Build Coastguard Worker ProductionKeyInTestRequest = 3, 46*9860b763SAndroid Build Coastguard Worker TestKeyInProductionRequest = 4, 47*9860b763SAndroid Build Coastguard Worker InvalidEek = 5, 48*9860b763SAndroid Build Coastguard Worker Removed = 6, 49*9860b763SAndroid Build Coastguard Worker } 50*9860b763SAndroid Build Coastguard Worker 51*9860b763SAndroid Build Coastguard Worker /// The default value for the minimum number of keys supported in a CSR. 52*9860b763SAndroid Build Coastguard Worker pub const MINIMUM_SUPPORTED_KEYS_IN_CSR: i32 = 20; 53*9860b763SAndroid Build Coastguard Worker 54*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)] 55*9860b763SAndroid Build Coastguard Worker pub struct HardwareInfo { 56*9860b763SAndroid Build Coastguard Worker pub version_number: i32, 57*9860b763SAndroid Build Coastguard Worker pub rpc_author_name: String, 58*9860b763SAndroid Build Coastguard Worker pub supported_eek_curve: EekCurve, 59*9860b763SAndroid Build Coastguard Worker pub unique_id: Option<String>, 60*9860b763SAndroid Build Coastguard Worker pub supported_num_keys_in_csr: i32, 61*9860b763SAndroid Build Coastguard Worker } 62*9860b763SAndroid Build Coastguard Worker 63*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)] 64*9860b763SAndroid Build Coastguard Worker #[repr(i32)] 65*9860b763SAndroid Build Coastguard Worker pub enum EekCurve { 66*9860b763SAndroid Build Coastguard Worker None = 0, 67*9860b763SAndroid Build Coastguard Worker P256 = 1, 68*9860b763SAndroid Build Coastguard Worker Curve25519 = 2, 69*9860b763SAndroid Build Coastguard Worker } 70*9860b763SAndroid Build Coastguard Worker try_from_n!(EekCurve); 71*9860b763SAndroid Build Coastguard Worker 72*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)] 73*9860b763SAndroid Build Coastguard Worker pub struct MacedPublicKey { 74*9860b763SAndroid Build Coastguard Worker pub maced_key: Vec<u8>, 75*9860b763SAndroid Build Coastguard Worker } 76*9860b763SAndroid Build Coastguard Worker 77*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)] 78*9860b763SAndroid Build Coastguard Worker pub struct ProtectedData { 79*9860b763SAndroid Build Coastguard Worker pub protected_data: Vec<u8>, 80*9860b763SAndroid Build Coastguard Worker } 81*9860b763SAndroid Build Coastguard Worker 82*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)] 83*9860b763SAndroid Build Coastguard Worker pub struct DeviceInfo { 84*9860b763SAndroid Build Coastguard Worker pub device_info: Vec<u8>, 85*9860b763SAndroid Build Coastguard Worker } 86