xref: /aosp_15_r20/system/keymint/wire/src/rpc.rs (revision 9860b7637a5f185913c70aa0caabe3ecb78441e4)
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