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 KeyMint HAL interfaces
16*9860b763SAndroid Build Coastguard Worker //!
17*9860b763SAndroid Build Coastguard Worker //! - Enums are encoded as exhaustive Rust enums backed by `i32`, using Rust naming
18*9860b763SAndroid Build Coastguard Worker //! conventions (CamelCase values).
19*9860b763SAndroid Build Coastguard Worker //! - Structs have all fields `pub`, using Rust naming conventions (snake_case fields).
20*9860b763SAndroid Build Coastguard Worker //! - Both enums and structs get a `[derive(AsCborValue)]`
21*9860b763SAndroid Build Coastguard Worker //!
22*9860b763SAndroid Build Coastguard Worker //! Special cases:
23*9860b763SAndroid Build Coastguard Worker //! - The `BeginResult` type of the HAL interface is omitted here, as it includes a
24*9860b763SAndroid Build Coastguard Worker //! Binder reference.
25*9860b763SAndroid Build Coastguard Worker //! - `Tag` is private to this module, because....
26*9860b763SAndroid Build Coastguard Worker //! - `KeyParam` is a Rust `enum` that is used in place of the `KeyParameter` struct, meaning...
27*9860b763SAndroid Build Coastguard Worker //! - `KeyParameterValue` is not included here.
28*9860b763SAndroid Build Coastguard Worker
29*9860b763SAndroid Build Coastguard Worker use crate::{
30*9860b763SAndroid Build Coastguard Worker cbor, cbor_type_error, try_from_n, vec_try, AsCborValue, CborError, KeySizeInBits, RsaExponent,
31*9860b763SAndroid Build Coastguard Worker };
32*9860b763SAndroid Build Coastguard Worker use alloc::format;
33*9860b763SAndroid Build Coastguard Worker use alloc::string::{String, ToString};
34*9860b763SAndroid Build Coastguard Worker use alloc::vec::Vec;
35*9860b763SAndroid Build Coastguard Worker use enumn::N;
36*9860b763SAndroid Build Coastguard Worker use kmr_derive::{AsCborValue, FromRawTag};
37*9860b763SAndroid Build Coastguard Worker
38*9860b763SAndroid Build Coastguard Worker /// Default certificate serial number of 1.
39*9860b763SAndroid Build Coastguard Worker pub const DEFAULT_CERT_SERIAL: &[u8] = &[0x01];
40*9860b763SAndroid Build Coastguard Worker
41*9860b763SAndroid Build Coastguard Worker /// ASN.1 DER encoding of the default certificate subject of 'CN=Android Keystore Key'.
42*9860b763SAndroid Build Coastguard Worker pub const DEFAULT_CERT_SUBJECT: &[u8] = &[
43*9860b763SAndroid Build Coastguard Worker 0x30, 0x1f, // SEQUENCE len 31
44*9860b763SAndroid Build Coastguard Worker 0x31, 0x1d, // SET len 29
45*9860b763SAndroid Build Coastguard Worker 0x30, 0x1b, // SEQUENCE len 27
46*9860b763SAndroid Build Coastguard Worker 0x06, 0x03, // OBJECT IDENTIFIER len 3
47*9860b763SAndroid Build Coastguard Worker 0x55, 0x04, 0x03, // 2.5.4.3 (commonName)
48*9860b763SAndroid Build Coastguard Worker 0x0c, 0x14, // UTF8String len 20
49*9860b763SAndroid Build Coastguard Worker 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x20, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65,
50*9860b763SAndroid Build Coastguard Worker 0x20, 0x4b, 0x65, 0x79, // "Android Keystore Key"
51*9860b763SAndroid Build Coastguard Worker ];
52*9860b763SAndroid Build Coastguard Worker
53*9860b763SAndroid Build Coastguard Worker /// Constants to indicate whether or not to include/expect more messages when splitting and then
54*9860b763SAndroid Build Coastguard Worker /// assembling the large responses sent from the TA to the HAL.
55*9860b763SAndroid Build Coastguard Worker pub const NEXT_MESSAGE_SIGNAL_TRUE: u8 = 0b00000001u8;
56*9860b763SAndroid Build Coastguard Worker pub const NEXT_MESSAGE_SIGNAL_FALSE: u8 = 0b00000000u8;
57*9860b763SAndroid Build Coastguard Worker
58*9860b763SAndroid Build Coastguard Worker /// We use Unix epoch as the start date of an undefined certificate validity period.
59*9860b763SAndroid Build Coastguard Worker pub const UNDEFINED_NOT_BEFORE: DateTime = DateTime { ms_since_epoch: 0 };
60*9860b763SAndroid Build Coastguard Worker /// Per RFC 5280 4.1.2.5, an undefined expiration (not-after) field should be set to
61*9860b763SAndroid Build Coastguard Worker /// 9999-12-31T23:59:59Z.
62*9860b763SAndroid Build Coastguard Worker pub const UNDEFINED_NOT_AFTER: DateTime = DateTime { ms_since_epoch: 253402300799000 };
63*9860b763SAndroid Build Coastguard Worker
64*9860b763SAndroid Build Coastguard Worker /// Possible verified boot state values.
65*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, N, AsCborValue)]
66*9860b763SAndroid Build Coastguard Worker pub enum VerifiedBootState {
67*9860b763SAndroid Build Coastguard Worker Verified = 0,
68*9860b763SAndroid Build Coastguard Worker SelfSigned = 1,
69*9860b763SAndroid Build Coastguard Worker Unverified = 2,
70*9860b763SAndroid Build Coastguard Worker Failed = 3,
71*9860b763SAndroid Build Coastguard Worker }
72*9860b763SAndroid Build Coastguard Worker
73*9860b763SAndroid Build Coastguard Worker impl TryFrom<i32> for VerifiedBootState {
74*9860b763SAndroid Build Coastguard Worker type Error = CborError;
try_from(v: i32) -> Result<Self, Self::Error>75*9860b763SAndroid Build Coastguard Worker fn try_from(v: i32) -> Result<Self, Self::Error> {
76*9860b763SAndroid Build Coastguard Worker Self::n(v).ok_or(CborError::OutOfRangeIntegerValue)
77*9860b763SAndroid Build Coastguard Worker }
78*9860b763SAndroid Build Coastguard Worker }
79*9860b763SAndroid Build Coastguard Worker
80*9860b763SAndroid Build Coastguard Worker /// Information provided once at start-of-day, normally by the bootloader.
81*9860b763SAndroid Build Coastguard Worker ///
82*9860b763SAndroid Build Coastguard Worker /// Field order is fixed, to match the CBOR type definition of `RootOfTrust` in `IKeyMintDevice`.
83*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, AsCborValue, PartialEq, Eq)]
84*9860b763SAndroid Build Coastguard Worker pub struct BootInfo {
85*9860b763SAndroid Build Coastguard Worker pub verified_boot_key: Vec<u8>,
86*9860b763SAndroid Build Coastguard Worker pub device_boot_locked: bool,
87*9860b763SAndroid Build Coastguard Worker pub verified_boot_state: VerifiedBootState,
88*9860b763SAndroid Build Coastguard Worker pub verified_boot_hash: Vec<u8>,
89*9860b763SAndroid Build Coastguard Worker pub boot_patchlevel: u32, // YYYYMMDD format
90*9860b763SAndroid Build Coastguard Worker }
91*9860b763SAndroid Build Coastguard Worker
92*9860b763SAndroid Build Coastguard Worker // Implement the `coset` CBOR serialization traits in terms of the local `AsCborValue` trait,
93*9860b763SAndroid Build Coastguard Worker // in order to get access to tagged versions of serialize/deserialize.
94*9860b763SAndroid Build Coastguard Worker impl coset::AsCborValue for BootInfo {
from_cbor_value(value: cbor::value::Value) -> coset::Result<Self>95*9860b763SAndroid Build Coastguard Worker fn from_cbor_value(value: cbor::value::Value) -> coset::Result<Self> {
96*9860b763SAndroid Build Coastguard Worker <Self as AsCborValue>::from_cbor_value(value).map_err(|e| e.into())
97*9860b763SAndroid Build Coastguard Worker }
to_cbor_value(self) -> coset::Result<cbor::value::Value>98*9860b763SAndroid Build Coastguard Worker fn to_cbor_value(self) -> coset::Result<cbor::value::Value> {
99*9860b763SAndroid Build Coastguard Worker <Self as AsCborValue>::to_cbor_value(self).map_err(|e| e.into())
100*9860b763SAndroid Build Coastguard Worker }
101*9860b763SAndroid Build Coastguard Worker }
102*9860b763SAndroid Build Coastguard Worker
103*9860b763SAndroid Build Coastguard Worker impl coset::TaggedCborSerializable for BootInfo {
104*9860b763SAndroid Build Coastguard Worker const TAG: u64 = 40001;
105*9860b763SAndroid Build Coastguard Worker }
106*9860b763SAndroid Build Coastguard Worker
107*9860b763SAndroid Build Coastguard Worker /// Representation of a date/time.
108*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
109*9860b763SAndroid Build Coastguard Worker pub struct DateTime {
110*9860b763SAndroid Build Coastguard Worker pub ms_since_epoch: i64,
111*9860b763SAndroid Build Coastguard Worker }
112*9860b763SAndroid Build Coastguard Worker
113*9860b763SAndroid Build Coastguard Worker impl AsCborValue for DateTime {
from_cbor_value(value: cbor::value::Value) -> Result<Self, CborError>114*9860b763SAndroid Build Coastguard Worker fn from_cbor_value(value: cbor::value::Value) -> Result<Self, CborError> {
115*9860b763SAndroid Build Coastguard Worker let val = <i64>::from_cbor_value(value)?;
116*9860b763SAndroid Build Coastguard Worker Ok(Self { ms_since_epoch: val })
117*9860b763SAndroid Build Coastguard Worker }
to_cbor_value(self) -> Result<cbor::value::Value, CborError>118*9860b763SAndroid Build Coastguard Worker fn to_cbor_value(self) -> Result<cbor::value::Value, CborError> {
119*9860b763SAndroid Build Coastguard Worker self.ms_since_epoch.to_cbor_value()
120*9860b763SAndroid Build Coastguard Worker }
cddl_typename() -> Option<String>121*9860b763SAndroid Build Coastguard Worker fn cddl_typename() -> Option<String> {
122*9860b763SAndroid Build Coastguard Worker Some("DateTime".to_string())
123*9860b763SAndroid Build Coastguard Worker }
cddl_schema() -> Option<String>124*9860b763SAndroid Build Coastguard Worker fn cddl_schema() -> Option<String> {
125*9860b763SAndroid Build Coastguard Worker Some("int".to_string())
126*9860b763SAndroid Build Coastguard Worker }
127*9860b763SAndroid Build Coastguard Worker }
128*9860b763SAndroid Build Coastguard Worker
129*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
130*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
131*9860b763SAndroid Build Coastguard Worker pub enum Algorithm {
132*9860b763SAndroid Build Coastguard Worker Rsa = 1,
133*9860b763SAndroid Build Coastguard Worker Ec = 3,
134*9860b763SAndroid Build Coastguard Worker Aes = 32,
135*9860b763SAndroid Build Coastguard Worker TripleDes = 33,
136*9860b763SAndroid Build Coastguard Worker Hmac = 128,
137*9860b763SAndroid Build Coastguard Worker }
138*9860b763SAndroid Build Coastguard Worker try_from_n!(Algorithm);
139*9860b763SAndroid Build Coastguard Worker
140*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)]
141*9860b763SAndroid Build Coastguard Worker pub struct AttestationKey {
142*9860b763SAndroid Build Coastguard Worker pub key_blob: Vec<u8>,
143*9860b763SAndroid Build Coastguard Worker pub attest_key_params: Vec<KeyParam>,
144*9860b763SAndroid Build Coastguard Worker pub issuer_subject_name: Vec<u8>,
145*9860b763SAndroid Build Coastguard Worker }
146*9860b763SAndroid Build Coastguard Worker
147*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
148*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
149*9860b763SAndroid Build Coastguard Worker pub enum BlockMode {
150*9860b763SAndroid Build Coastguard Worker Ecb = 1,
151*9860b763SAndroid Build Coastguard Worker Cbc = 2,
152*9860b763SAndroid Build Coastguard Worker Ctr = 3,
153*9860b763SAndroid Build Coastguard Worker Gcm = 32,
154*9860b763SAndroid Build Coastguard Worker }
155*9860b763SAndroid Build Coastguard Worker try_from_n!(BlockMode);
156*9860b763SAndroid Build Coastguard Worker
157*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)]
158*9860b763SAndroid Build Coastguard Worker pub struct Certificate {
159*9860b763SAndroid Build Coastguard Worker pub encoded_certificate: Vec<u8>,
160*9860b763SAndroid Build Coastguard Worker }
161*9860b763SAndroid Build Coastguard Worker
162*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
163*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
164*9860b763SAndroid Build Coastguard Worker pub enum Digest {
165*9860b763SAndroid Build Coastguard Worker None = 0,
166*9860b763SAndroid Build Coastguard Worker Md5 = 1,
167*9860b763SAndroid Build Coastguard Worker Sha1 = 2,
168*9860b763SAndroid Build Coastguard Worker Sha224 = 3,
169*9860b763SAndroid Build Coastguard Worker Sha256 = 4,
170*9860b763SAndroid Build Coastguard Worker Sha384 = 5,
171*9860b763SAndroid Build Coastguard Worker Sha512 = 6,
172*9860b763SAndroid Build Coastguard Worker }
173*9860b763SAndroid Build Coastguard Worker try_from_n!(Digest);
174*9860b763SAndroid Build Coastguard Worker
175*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
176*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
177*9860b763SAndroid Build Coastguard Worker pub enum EcCurve {
178*9860b763SAndroid Build Coastguard Worker P224 = 0,
179*9860b763SAndroid Build Coastguard Worker P256 = 1,
180*9860b763SAndroid Build Coastguard Worker P384 = 2,
181*9860b763SAndroid Build Coastguard Worker P521 = 3,
182*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v2")]
183*9860b763SAndroid Build Coastguard Worker Curve25519 = 4,
184*9860b763SAndroid Build Coastguard Worker }
185*9860b763SAndroid Build Coastguard Worker try_from_n!(EcCurve);
186*9860b763SAndroid Build Coastguard Worker
187*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
188*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
189*9860b763SAndroid Build Coastguard Worker pub enum ErrorCode {
190*9860b763SAndroid Build Coastguard Worker Ok = 0,
191*9860b763SAndroid Build Coastguard Worker RootOfTrustAlreadySet = -1,
192*9860b763SAndroid Build Coastguard Worker UnsupportedPurpose = -2,
193*9860b763SAndroid Build Coastguard Worker IncompatiblePurpose = -3,
194*9860b763SAndroid Build Coastguard Worker UnsupportedAlgorithm = -4,
195*9860b763SAndroid Build Coastguard Worker IncompatibleAlgorithm = -5,
196*9860b763SAndroid Build Coastguard Worker UnsupportedKeySize = -6,
197*9860b763SAndroid Build Coastguard Worker UnsupportedBlockMode = -7,
198*9860b763SAndroid Build Coastguard Worker IncompatibleBlockMode = -8,
199*9860b763SAndroid Build Coastguard Worker UnsupportedMacLength = -9,
200*9860b763SAndroid Build Coastguard Worker UnsupportedPaddingMode = -10,
201*9860b763SAndroid Build Coastguard Worker IncompatiblePaddingMode = -11,
202*9860b763SAndroid Build Coastguard Worker UnsupportedDigest = -12,
203*9860b763SAndroid Build Coastguard Worker IncompatibleDigest = -13,
204*9860b763SAndroid Build Coastguard Worker InvalidExpirationTime = -14,
205*9860b763SAndroid Build Coastguard Worker InvalidUserId = -15,
206*9860b763SAndroid Build Coastguard Worker InvalidAuthorizationTimeout = -16,
207*9860b763SAndroid Build Coastguard Worker UnsupportedKeyFormat = -17,
208*9860b763SAndroid Build Coastguard Worker IncompatibleKeyFormat = -18,
209*9860b763SAndroid Build Coastguard Worker UnsupportedKeyEncryptionAlgorithm = -19,
210*9860b763SAndroid Build Coastguard Worker UnsupportedKeyVerificationAlgorithm = -20,
211*9860b763SAndroid Build Coastguard Worker InvalidInputLength = -21,
212*9860b763SAndroid Build Coastguard Worker KeyExportOptionsInvalid = -22,
213*9860b763SAndroid Build Coastguard Worker DelegationNotAllowed = -23,
214*9860b763SAndroid Build Coastguard Worker KeyNotYetValid = -24,
215*9860b763SAndroid Build Coastguard Worker KeyExpired = -25,
216*9860b763SAndroid Build Coastguard Worker KeyUserNotAuthenticated = -26,
217*9860b763SAndroid Build Coastguard Worker OutputParameterNull = -27,
218*9860b763SAndroid Build Coastguard Worker InvalidOperationHandle = -28,
219*9860b763SAndroid Build Coastguard Worker InsufficientBufferSpace = -29,
220*9860b763SAndroid Build Coastguard Worker VerificationFailed = -30,
221*9860b763SAndroid Build Coastguard Worker TooManyOperations = -31,
222*9860b763SAndroid Build Coastguard Worker UnexpectedNullPointer = -32,
223*9860b763SAndroid Build Coastguard Worker InvalidKeyBlob = -33,
224*9860b763SAndroid Build Coastguard Worker ImportedKeyNotEncrypted = -34,
225*9860b763SAndroid Build Coastguard Worker ImportedKeyDecryptionFailed = -35,
226*9860b763SAndroid Build Coastguard Worker ImportedKeyNotSigned = -36,
227*9860b763SAndroid Build Coastguard Worker ImportedKeyVerificationFailed = -37,
228*9860b763SAndroid Build Coastguard Worker InvalidArgument = -38,
229*9860b763SAndroid Build Coastguard Worker UnsupportedTag = -39,
230*9860b763SAndroid Build Coastguard Worker InvalidTag = -40,
231*9860b763SAndroid Build Coastguard Worker MemoryAllocationFailed = -41,
232*9860b763SAndroid Build Coastguard Worker ImportParameterMismatch = -44,
233*9860b763SAndroid Build Coastguard Worker SecureHwAccessDenied = -45,
234*9860b763SAndroid Build Coastguard Worker OperationCancelled = -46,
235*9860b763SAndroid Build Coastguard Worker ConcurrentAccessConflict = -47,
236*9860b763SAndroid Build Coastguard Worker SecureHwBusy = -48,
237*9860b763SAndroid Build Coastguard Worker SecureHwCommunicationFailed = -49,
238*9860b763SAndroid Build Coastguard Worker UnsupportedEcField = -50,
239*9860b763SAndroid Build Coastguard Worker MissingNonce = -51,
240*9860b763SAndroid Build Coastguard Worker InvalidNonce = -52,
241*9860b763SAndroid Build Coastguard Worker MissingMacLength = -53,
242*9860b763SAndroid Build Coastguard Worker KeyRateLimitExceeded = -54,
243*9860b763SAndroid Build Coastguard Worker CallerNonceProhibited = -55,
244*9860b763SAndroid Build Coastguard Worker KeyMaxOpsExceeded = -56,
245*9860b763SAndroid Build Coastguard Worker InvalidMacLength = -57,
246*9860b763SAndroid Build Coastguard Worker MissingMinMacLength = -58,
247*9860b763SAndroid Build Coastguard Worker UnsupportedMinMacLength = -59,
248*9860b763SAndroid Build Coastguard Worker UnsupportedKdf = -60,
249*9860b763SAndroid Build Coastguard Worker UnsupportedEcCurve = -61,
250*9860b763SAndroid Build Coastguard Worker KeyRequiresUpgrade = -62,
251*9860b763SAndroid Build Coastguard Worker AttestationChallengeMissing = -63,
252*9860b763SAndroid Build Coastguard Worker KeymintNotConfigured = -64,
253*9860b763SAndroid Build Coastguard Worker AttestationApplicationIdMissing = -65,
254*9860b763SAndroid Build Coastguard Worker CannotAttestIds = -66,
255*9860b763SAndroid Build Coastguard Worker RollbackResistanceUnavailable = -67,
256*9860b763SAndroid Build Coastguard Worker HardwareTypeUnavailable = -68,
257*9860b763SAndroid Build Coastguard Worker ProofOfPresenceRequired = -69,
258*9860b763SAndroid Build Coastguard Worker ConcurrentProofOfPresenceRequested = -70,
259*9860b763SAndroid Build Coastguard Worker NoUserConfirmation = -71,
260*9860b763SAndroid Build Coastguard Worker DeviceLocked = -72,
261*9860b763SAndroid Build Coastguard Worker EarlyBootEnded = -73,
262*9860b763SAndroid Build Coastguard Worker AttestationKeysNotProvisioned = -74,
263*9860b763SAndroid Build Coastguard Worker AttestationIdsNotProvisioned = -75,
264*9860b763SAndroid Build Coastguard Worker InvalidOperation = -76,
265*9860b763SAndroid Build Coastguard Worker StorageKeyUnsupported = -77,
266*9860b763SAndroid Build Coastguard Worker IncompatibleMgfDigest = -78,
267*9860b763SAndroid Build Coastguard Worker UnsupportedMgfDigest = -79,
268*9860b763SAndroid Build Coastguard Worker MissingNotBefore = -80,
269*9860b763SAndroid Build Coastguard Worker MissingNotAfter = -81,
270*9860b763SAndroid Build Coastguard Worker MissingIssuerSubject = -82,
271*9860b763SAndroid Build Coastguard Worker InvalidIssuerSubject = -83,
272*9860b763SAndroid Build Coastguard Worker BootLevelExceeded = -84,
273*9860b763SAndroid Build Coastguard Worker HardwareNotYetAvailable = -85,
274*9860b763SAndroid Build Coastguard Worker ModuleHashAlreadySet = -86,
275*9860b763SAndroid Build Coastguard Worker Unimplemented = -100,
276*9860b763SAndroid Build Coastguard Worker VersionMismatch = -101,
277*9860b763SAndroid Build Coastguard Worker UnknownError = -1000,
278*9860b763SAndroid Build Coastguard Worker // Implementer's namespace for error codes starts at -10000.
279*9860b763SAndroid Build Coastguard Worker EncodingError = -20000,
280*9860b763SAndroid Build Coastguard Worker BoringSslError = -30000,
281*9860b763SAndroid Build Coastguard Worker }
282*9860b763SAndroid Build Coastguard Worker try_from_n!(ErrorCode);
283*9860b763SAndroid Build Coastguard Worker
284*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)]
285*9860b763SAndroid Build Coastguard Worker pub struct HardwareAuthToken {
286*9860b763SAndroid Build Coastguard Worker pub challenge: i64,
287*9860b763SAndroid Build Coastguard Worker pub user_id: i64,
288*9860b763SAndroid Build Coastguard Worker pub authenticator_id: i64,
289*9860b763SAndroid Build Coastguard Worker pub authenticator_type: HardwareAuthenticatorType,
290*9860b763SAndroid Build Coastguard Worker pub timestamp: super::secureclock::Timestamp,
291*9860b763SAndroid Build Coastguard Worker pub mac: Vec<u8>,
292*9860b763SAndroid Build Coastguard Worker }
293*9860b763SAndroid Build Coastguard Worker
294*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
295*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
296*9860b763SAndroid Build Coastguard Worker pub enum HardwareAuthenticatorType {
297*9860b763SAndroid Build Coastguard Worker None = 0,
298*9860b763SAndroid Build Coastguard Worker Password = 1,
299*9860b763SAndroid Build Coastguard Worker Fingerprint = 2,
300*9860b763SAndroid Build Coastguard Worker Any = -1,
301*9860b763SAndroid Build Coastguard Worker }
302*9860b763SAndroid Build Coastguard Worker try_from_n!(HardwareAuthenticatorType);
303*9860b763SAndroid Build Coastguard Worker
304*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)]
305*9860b763SAndroid Build Coastguard Worker pub struct KeyCharacteristics {
306*9860b763SAndroid Build Coastguard Worker pub security_level: SecurityLevel,
307*9860b763SAndroid Build Coastguard Worker pub authorizations: Vec<KeyParam>,
308*9860b763SAndroid Build Coastguard Worker }
309*9860b763SAndroid Build Coastguard Worker
310*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)]
311*9860b763SAndroid Build Coastguard Worker pub struct KeyCreationResult {
312*9860b763SAndroid Build Coastguard Worker pub key_blob: Vec<u8>,
313*9860b763SAndroid Build Coastguard Worker pub key_characteristics: Vec<KeyCharacteristics>,
314*9860b763SAndroid Build Coastguard Worker pub certificate_chain: Vec<Certificate>,
315*9860b763SAndroid Build Coastguard Worker }
316*9860b763SAndroid Build Coastguard Worker
317*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
318*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
319*9860b763SAndroid Build Coastguard Worker pub enum KeyFormat {
320*9860b763SAndroid Build Coastguard Worker X509 = 0,
321*9860b763SAndroid Build Coastguard Worker Pkcs8 = 1,
322*9860b763SAndroid Build Coastguard Worker Raw = 3,
323*9860b763SAndroid Build Coastguard Worker }
324*9860b763SAndroid Build Coastguard Worker try_from_n!(KeyFormat);
325*9860b763SAndroid Build Coastguard Worker
326*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, Eq, PartialEq, AsCborValue)]
327*9860b763SAndroid Build Coastguard Worker pub struct KeyMintHardwareInfo {
328*9860b763SAndroid Build Coastguard Worker pub version_number: i32,
329*9860b763SAndroid Build Coastguard Worker pub security_level: SecurityLevel,
330*9860b763SAndroid Build Coastguard Worker pub key_mint_name: String,
331*9860b763SAndroid Build Coastguard Worker pub key_mint_author_name: String,
332*9860b763SAndroid Build Coastguard Worker pub timestamp_token_required: bool,
333*9860b763SAndroid Build Coastguard Worker }
334*9860b763SAndroid Build Coastguard Worker
335*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
336*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
337*9860b763SAndroid Build Coastguard Worker pub enum KeyOrigin {
338*9860b763SAndroid Build Coastguard Worker Generated = 0,
339*9860b763SAndroid Build Coastguard Worker Derived = 1,
340*9860b763SAndroid Build Coastguard Worker Imported = 2,
341*9860b763SAndroid Build Coastguard Worker Reserved = 3,
342*9860b763SAndroid Build Coastguard Worker SecurelyImported = 4,
343*9860b763SAndroid Build Coastguard Worker }
344*9860b763SAndroid Build Coastguard Worker try_from_n!(KeyOrigin);
345*9860b763SAndroid Build Coastguard Worker
346*9860b763SAndroid Build Coastguard Worker /// Rust exhaustive enum for all key parameters.
347*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, PartialEq, Eq)]
348*9860b763SAndroid Build Coastguard Worker pub enum KeyParam {
349*9860b763SAndroid Build Coastguard Worker Purpose(KeyPurpose),
350*9860b763SAndroid Build Coastguard Worker Algorithm(Algorithm),
351*9860b763SAndroid Build Coastguard Worker KeySize(KeySizeInBits),
352*9860b763SAndroid Build Coastguard Worker BlockMode(BlockMode),
353*9860b763SAndroid Build Coastguard Worker Digest(Digest),
354*9860b763SAndroid Build Coastguard Worker Padding(PaddingMode),
355*9860b763SAndroid Build Coastguard Worker CallerNonce,
356*9860b763SAndroid Build Coastguard Worker MinMacLength(u32),
357*9860b763SAndroid Build Coastguard Worker EcCurve(EcCurve),
358*9860b763SAndroid Build Coastguard Worker RsaPublicExponent(RsaExponent),
359*9860b763SAndroid Build Coastguard Worker IncludeUniqueId,
360*9860b763SAndroid Build Coastguard Worker RsaOaepMgfDigest(Digest),
361*9860b763SAndroid Build Coastguard Worker BootloaderOnly,
362*9860b763SAndroid Build Coastguard Worker RollbackResistance,
363*9860b763SAndroid Build Coastguard Worker EarlyBootOnly,
364*9860b763SAndroid Build Coastguard Worker ActiveDatetime(DateTime),
365*9860b763SAndroid Build Coastguard Worker OriginationExpireDatetime(DateTime),
366*9860b763SAndroid Build Coastguard Worker UsageExpireDatetime(DateTime),
367*9860b763SAndroid Build Coastguard Worker MaxUsesPerBoot(u32),
368*9860b763SAndroid Build Coastguard Worker UsageCountLimit(u32),
369*9860b763SAndroid Build Coastguard Worker UserId(u32),
370*9860b763SAndroid Build Coastguard Worker UserSecureId(u64),
371*9860b763SAndroid Build Coastguard Worker NoAuthRequired,
372*9860b763SAndroid Build Coastguard Worker UserAuthType(u32),
373*9860b763SAndroid Build Coastguard Worker AuthTimeout(u32),
374*9860b763SAndroid Build Coastguard Worker AllowWhileOnBody,
375*9860b763SAndroid Build Coastguard Worker TrustedUserPresenceRequired,
376*9860b763SAndroid Build Coastguard Worker TrustedConfirmationRequired,
377*9860b763SAndroid Build Coastguard Worker UnlockedDeviceRequired,
378*9860b763SAndroid Build Coastguard Worker ApplicationId(Vec<u8>),
379*9860b763SAndroid Build Coastguard Worker ApplicationData(Vec<u8>),
380*9860b763SAndroid Build Coastguard Worker CreationDatetime(DateTime),
381*9860b763SAndroid Build Coastguard Worker Origin(KeyOrigin),
382*9860b763SAndroid Build Coastguard Worker RootOfTrust(Vec<u8>),
383*9860b763SAndroid Build Coastguard Worker OsVersion(u32),
384*9860b763SAndroid Build Coastguard Worker OsPatchlevel(u32),
385*9860b763SAndroid Build Coastguard Worker AttestationChallenge(Vec<u8>),
386*9860b763SAndroid Build Coastguard Worker AttestationApplicationId(Vec<u8>),
387*9860b763SAndroid Build Coastguard Worker AttestationIdBrand(Vec<u8>),
388*9860b763SAndroid Build Coastguard Worker AttestationIdDevice(Vec<u8>),
389*9860b763SAndroid Build Coastguard Worker AttestationIdProduct(Vec<u8>),
390*9860b763SAndroid Build Coastguard Worker AttestationIdSerial(Vec<u8>),
391*9860b763SAndroid Build Coastguard Worker AttestationIdImei(Vec<u8>),
392*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v3")]
393*9860b763SAndroid Build Coastguard Worker AttestationIdSecondImei(Vec<u8>),
394*9860b763SAndroid Build Coastguard Worker AttestationIdMeid(Vec<u8>),
395*9860b763SAndroid Build Coastguard Worker AttestationIdManufacturer(Vec<u8>),
396*9860b763SAndroid Build Coastguard Worker AttestationIdModel(Vec<u8>),
397*9860b763SAndroid Build Coastguard Worker VendorPatchlevel(u32),
398*9860b763SAndroid Build Coastguard Worker BootPatchlevel(u32),
399*9860b763SAndroid Build Coastguard Worker DeviceUniqueAttestation,
400*9860b763SAndroid Build Coastguard Worker StorageKey,
401*9860b763SAndroid Build Coastguard Worker Nonce(Vec<u8>),
402*9860b763SAndroid Build Coastguard Worker MacLength(u32),
403*9860b763SAndroid Build Coastguard Worker ResetSinceIdRotation,
404*9860b763SAndroid Build Coastguard Worker CertificateSerial(Vec<u8>),
405*9860b763SAndroid Build Coastguard Worker CertificateSubject(Vec<u8>),
406*9860b763SAndroid Build Coastguard Worker CertificateNotBefore(DateTime),
407*9860b763SAndroid Build Coastguard Worker CertificateNotAfter(DateTime),
408*9860b763SAndroid Build Coastguard Worker MaxBootLevel(u32),
409*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v4")]
410*9860b763SAndroid Build Coastguard Worker ModuleHash(Vec<u8>),
411*9860b763SAndroid Build Coastguard Worker }
412*9860b763SAndroid Build Coastguard Worker
413*9860b763SAndroid Build Coastguard Worker impl KeyParam {
tag(&self) -> Tag414*9860b763SAndroid Build Coastguard Worker pub fn tag(&self) -> Tag {
415*9860b763SAndroid Build Coastguard Worker match self {
416*9860b763SAndroid Build Coastguard Worker KeyParam::Algorithm(_) => Tag::Algorithm,
417*9860b763SAndroid Build Coastguard Worker KeyParam::BlockMode(_) => Tag::BlockMode,
418*9860b763SAndroid Build Coastguard Worker KeyParam::Padding(_) => Tag::Padding,
419*9860b763SAndroid Build Coastguard Worker KeyParam::Digest(_) => Tag::Digest,
420*9860b763SAndroid Build Coastguard Worker KeyParam::EcCurve(_) => Tag::EcCurve,
421*9860b763SAndroid Build Coastguard Worker KeyParam::Origin(_) => Tag::Origin,
422*9860b763SAndroid Build Coastguard Worker KeyParam::Purpose(_) => Tag::Purpose,
423*9860b763SAndroid Build Coastguard Worker KeyParam::KeySize(_) => Tag::KeySize,
424*9860b763SAndroid Build Coastguard Worker KeyParam::CallerNonce => Tag::CallerNonce,
425*9860b763SAndroid Build Coastguard Worker KeyParam::MinMacLength(_) => Tag::MinMacLength,
426*9860b763SAndroid Build Coastguard Worker KeyParam::RsaPublicExponent(_) => Tag::RsaPublicExponent,
427*9860b763SAndroid Build Coastguard Worker KeyParam::IncludeUniqueId => Tag::IncludeUniqueId,
428*9860b763SAndroid Build Coastguard Worker KeyParam::RsaOaepMgfDigest(_) => Tag::RsaOaepMgfDigest,
429*9860b763SAndroid Build Coastguard Worker KeyParam::BootloaderOnly => Tag::BootloaderOnly,
430*9860b763SAndroid Build Coastguard Worker KeyParam::RollbackResistance => Tag::RollbackResistance,
431*9860b763SAndroid Build Coastguard Worker KeyParam::EarlyBootOnly => Tag::EarlyBootOnly,
432*9860b763SAndroid Build Coastguard Worker KeyParam::ActiveDatetime(_) => Tag::ActiveDatetime,
433*9860b763SAndroid Build Coastguard Worker KeyParam::OriginationExpireDatetime(_) => Tag::OriginationExpireDatetime,
434*9860b763SAndroid Build Coastguard Worker KeyParam::UsageExpireDatetime(_) => Tag::UsageExpireDatetime,
435*9860b763SAndroid Build Coastguard Worker KeyParam::MaxUsesPerBoot(_) => Tag::MaxUsesPerBoot,
436*9860b763SAndroid Build Coastguard Worker KeyParam::UsageCountLimit(_) => Tag::UsageCountLimit,
437*9860b763SAndroid Build Coastguard Worker KeyParam::UserId(_) => Tag::UserId,
438*9860b763SAndroid Build Coastguard Worker KeyParam::UserSecureId(_) => Tag::UserSecureId,
439*9860b763SAndroid Build Coastguard Worker KeyParam::NoAuthRequired => Tag::NoAuthRequired,
440*9860b763SAndroid Build Coastguard Worker KeyParam::UserAuthType(_) => Tag::UserAuthType,
441*9860b763SAndroid Build Coastguard Worker KeyParam::AuthTimeout(_) => Tag::AuthTimeout,
442*9860b763SAndroid Build Coastguard Worker KeyParam::AllowWhileOnBody => Tag::AllowWhileOnBody,
443*9860b763SAndroid Build Coastguard Worker KeyParam::TrustedUserPresenceRequired => Tag::TrustedUserPresenceRequired,
444*9860b763SAndroid Build Coastguard Worker KeyParam::TrustedConfirmationRequired => Tag::TrustedConfirmationRequired,
445*9860b763SAndroid Build Coastguard Worker KeyParam::UnlockedDeviceRequired => Tag::UnlockedDeviceRequired,
446*9860b763SAndroid Build Coastguard Worker KeyParam::ApplicationId(_) => Tag::ApplicationId,
447*9860b763SAndroid Build Coastguard Worker KeyParam::ApplicationData(_) => Tag::ApplicationData,
448*9860b763SAndroid Build Coastguard Worker KeyParam::CreationDatetime(_) => Tag::CreationDatetime,
449*9860b763SAndroid Build Coastguard Worker KeyParam::RootOfTrust(_) => Tag::RootOfTrust,
450*9860b763SAndroid Build Coastguard Worker KeyParam::OsVersion(_) => Tag::OsVersion,
451*9860b763SAndroid Build Coastguard Worker KeyParam::OsPatchlevel(_) => Tag::OsPatchlevel,
452*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationChallenge(_) => Tag::AttestationChallenge,
453*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationApplicationId(_) => Tag::AttestationApplicationId,
454*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdBrand(_) => Tag::AttestationIdBrand,
455*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdDevice(_) => Tag::AttestationIdDevice,
456*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdProduct(_) => Tag::AttestationIdProduct,
457*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdSerial(_) => Tag::AttestationIdSerial,
458*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdImei(_) => Tag::AttestationIdImei,
459*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v3")]
460*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdSecondImei(_) => Tag::AttestationIdSecondImei,
461*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdMeid(_) => Tag::AttestationIdMeid,
462*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdManufacturer(_) => Tag::AttestationIdManufacturer,
463*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdModel(_) => Tag::AttestationIdModel,
464*9860b763SAndroid Build Coastguard Worker KeyParam::VendorPatchlevel(_) => Tag::VendorPatchlevel,
465*9860b763SAndroid Build Coastguard Worker KeyParam::BootPatchlevel(_) => Tag::BootPatchlevel,
466*9860b763SAndroid Build Coastguard Worker KeyParam::DeviceUniqueAttestation => Tag::DeviceUniqueAttestation,
467*9860b763SAndroid Build Coastguard Worker KeyParam::StorageKey => Tag::StorageKey,
468*9860b763SAndroid Build Coastguard Worker KeyParam::Nonce(_) => Tag::Nonce,
469*9860b763SAndroid Build Coastguard Worker KeyParam::MacLength(_) => Tag::MacLength,
470*9860b763SAndroid Build Coastguard Worker KeyParam::ResetSinceIdRotation => Tag::ResetSinceIdRotation,
471*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateSerial(_) => Tag::CertificateSerial,
472*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateSubject(_) => Tag::CertificateSubject,
473*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateNotBefore(_) => Tag::CertificateNotBefore,
474*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateNotAfter(_) => Tag::CertificateNotAfter,
475*9860b763SAndroid Build Coastguard Worker KeyParam::MaxBootLevel(_) => Tag::MaxBootLevel,
476*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v4")]
477*9860b763SAndroid Build Coastguard Worker KeyParam::ModuleHash(_) => Tag::ModuleHash,
478*9860b763SAndroid Build Coastguard Worker }
479*9860b763SAndroid Build Coastguard Worker }
480*9860b763SAndroid Build Coastguard Worker }
481*9860b763SAndroid Build Coastguard Worker
482*9860b763SAndroid Build Coastguard Worker /// Check that a `bool` value is true (false values are represented by the absence of a tag).
check_bool(value: cbor::value::Value) -> Result<(), crate::CborError>483*9860b763SAndroid Build Coastguard Worker fn check_bool(value: cbor::value::Value) -> Result<(), crate::CborError> {
484*9860b763SAndroid Build Coastguard Worker match value {
485*9860b763SAndroid Build Coastguard Worker cbor::value::Value::Bool(true) => Ok(()),
486*9860b763SAndroid Build Coastguard Worker cbor::value::Value::Bool(false) => Err(crate::CborError::UnexpectedItem("false", "true")),
487*9860b763SAndroid Build Coastguard Worker _ => crate::cbor_type_error(&value, "true"),
488*9860b763SAndroid Build Coastguard Worker }
489*9860b763SAndroid Build Coastguard Worker }
490*9860b763SAndroid Build Coastguard Worker
491*9860b763SAndroid Build Coastguard Worker /// Manual implementation of [`crate::AsCborValue`] for the [`KeyParam`] enum that
492*9860b763SAndroid Build Coastguard Worker /// matches the serialization of the HAL `Tag` / `KeyParameterValue` types.
493*9860b763SAndroid Build Coastguard Worker impl crate::AsCborValue for KeyParam {
from_cbor_value(value: cbor::value::Value) -> Result<Self, crate::CborError>494*9860b763SAndroid Build Coastguard Worker fn from_cbor_value(value: cbor::value::Value) -> Result<Self, crate::CborError> {
495*9860b763SAndroid Build Coastguard Worker let mut a = match value {
496*9860b763SAndroid Build Coastguard Worker cbor::value::Value::Array(a) => a,
497*9860b763SAndroid Build Coastguard Worker _ => return crate::cbor_type_error(&value, "arr"),
498*9860b763SAndroid Build Coastguard Worker };
499*9860b763SAndroid Build Coastguard Worker if a.len() != 2 {
500*9860b763SAndroid Build Coastguard Worker return Err(crate::CborError::UnexpectedItem("arr", "arr len 2"));
501*9860b763SAndroid Build Coastguard Worker }
502*9860b763SAndroid Build Coastguard Worker
503*9860b763SAndroid Build Coastguard Worker // Need to know the tag value to completely parse the value.
504*9860b763SAndroid Build Coastguard Worker let raw = a.remove(1);
505*9860b763SAndroid Build Coastguard Worker let tag = <Tag>::from_cbor_value(a.remove(0))?;
506*9860b763SAndroid Build Coastguard Worker
507*9860b763SAndroid Build Coastguard Worker Ok(match tag {
508*9860b763SAndroid Build Coastguard Worker Tag::Algorithm => KeyParam::Algorithm(<Algorithm>::from_cbor_value(raw)?),
509*9860b763SAndroid Build Coastguard Worker Tag::BlockMode => KeyParam::BlockMode(<BlockMode>::from_cbor_value(raw)?),
510*9860b763SAndroid Build Coastguard Worker Tag::Padding => KeyParam::Padding(<PaddingMode>::from_cbor_value(raw)?),
511*9860b763SAndroid Build Coastguard Worker Tag::Digest => KeyParam::Digest(<Digest>::from_cbor_value(raw)?),
512*9860b763SAndroid Build Coastguard Worker Tag::EcCurve => KeyParam::EcCurve(<EcCurve>::from_cbor_value(raw)?),
513*9860b763SAndroid Build Coastguard Worker Tag::Origin => KeyParam::Origin(<KeyOrigin>::from_cbor_value(raw)?),
514*9860b763SAndroid Build Coastguard Worker Tag::Purpose => KeyParam::Purpose(<KeyPurpose>::from_cbor_value(raw)?),
515*9860b763SAndroid Build Coastguard Worker Tag::KeySize => KeyParam::KeySize(<KeySizeInBits>::from_cbor_value(raw)?),
516*9860b763SAndroid Build Coastguard Worker Tag::CallerNonce => KeyParam::CallerNonce,
517*9860b763SAndroid Build Coastguard Worker Tag::MinMacLength => KeyParam::MinMacLength(<u32>::from_cbor_value(raw)?),
518*9860b763SAndroid Build Coastguard Worker Tag::RsaPublicExponent => {
519*9860b763SAndroid Build Coastguard Worker KeyParam::RsaPublicExponent(<RsaExponent>::from_cbor_value(raw)?)
520*9860b763SAndroid Build Coastguard Worker }
521*9860b763SAndroid Build Coastguard Worker Tag::IncludeUniqueId => {
522*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
523*9860b763SAndroid Build Coastguard Worker KeyParam::IncludeUniqueId
524*9860b763SAndroid Build Coastguard Worker }
525*9860b763SAndroid Build Coastguard Worker Tag::RsaOaepMgfDigest => KeyParam::RsaOaepMgfDigest(<Digest>::from_cbor_value(raw)?),
526*9860b763SAndroid Build Coastguard Worker Tag::BootloaderOnly => {
527*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
528*9860b763SAndroid Build Coastguard Worker KeyParam::BootloaderOnly
529*9860b763SAndroid Build Coastguard Worker }
530*9860b763SAndroid Build Coastguard Worker Tag::RollbackResistance => {
531*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
532*9860b763SAndroid Build Coastguard Worker KeyParam::RollbackResistance
533*9860b763SAndroid Build Coastguard Worker }
534*9860b763SAndroid Build Coastguard Worker Tag::EarlyBootOnly => {
535*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
536*9860b763SAndroid Build Coastguard Worker KeyParam::EarlyBootOnly
537*9860b763SAndroid Build Coastguard Worker }
538*9860b763SAndroid Build Coastguard Worker Tag::ActiveDatetime => KeyParam::ActiveDatetime(<DateTime>::from_cbor_value(raw)?),
539*9860b763SAndroid Build Coastguard Worker Tag::OriginationExpireDatetime => {
540*9860b763SAndroid Build Coastguard Worker KeyParam::OriginationExpireDatetime(<DateTime>::from_cbor_value(raw)?)
541*9860b763SAndroid Build Coastguard Worker }
542*9860b763SAndroid Build Coastguard Worker Tag::UsageExpireDatetime => {
543*9860b763SAndroid Build Coastguard Worker KeyParam::UsageExpireDatetime(<DateTime>::from_cbor_value(raw)?)
544*9860b763SAndroid Build Coastguard Worker }
545*9860b763SAndroid Build Coastguard Worker Tag::MaxUsesPerBoot => KeyParam::MaxUsesPerBoot(<u32>::from_cbor_value(raw)?),
546*9860b763SAndroid Build Coastguard Worker Tag::UsageCountLimit => KeyParam::UsageCountLimit(<u32>::from_cbor_value(raw)?),
547*9860b763SAndroid Build Coastguard Worker Tag::UserId => KeyParam::UserId(<u32>::from_cbor_value(raw)?),
548*9860b763SAndroid Build Coastguard Worker Tag::UserSecureId => KeyParam::UserSecureId(<u64>::from_cbor_value(raw)?),
549*9860b763SAndroid Build Coastguard Worker Tag::NoAuthRequired => {
550*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
551*9860b763SAndroid Build Coastguard Worker KeyParam::NoAuthRequired
552*9860b763SAndroid Build Coastguard Worker }
553*9860b763SAndroid Build Coastguard Worker Tag::UserAuthType => KeyParam::UserAuthType(<u32>::from_cbor_value(raw)?),
554*9860b763SAndroid Build Coastguard Worker Tag::AuthTimeout => KeyParam::AuthTimeout(<u32>::from_cbor_value(raw)?),
555*9860b763SAndroid Build Coastguard Worker Tag::AllowWhileOnBody => KeyParam::AllowWhileOnBody,
556*9860b763SAndroid Build Coastguard Worker Tag::TrustedUserPresenceRequired => {
557*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
558*9860b763SAndroid Build Coastguard Worker KeyParam::TrustedUserPresenceRequired
559*9860b763SAndroid Build Coastguard Worker }
560*9860b763SAndroid Build Coastguard Worker Tag::TrustedConfirmationRequired => {
561*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
562*9860b763SAndroid Build Coastguard Worker KeyParam::TrustedConfirmationRequired
563*9860b763SAndroid Build Coastguard Worker }
564*9860b763SAndroid Build Coastguard Worker Tag::UnlockedDeviceRequired => {
565*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
566*9860b763SAndroid Build Coastguard Worker KeyParam::UnlockedDeviceRequired
567*9860b763SAndroid Build Coastguard Worker }
568*9860b763SAndroid Build Coastguard Worker Tag::ApplicationId => KeyParam::ApplicationId(<Vec<u8>>::from_cbor_value(raw)?),
569*9860b763SAndroid Build Coastguard Worker Tag::ApplicationData => KeyParam::ApplicationData(<Vec<u8>>::from_cbor_value(raw)?),
570*9860b763SAndroid Build Coastguard Worker Tag::CreationDatetime => KeyParam::CreationDatetime(<DateTime>::from_cbor_value(raw)?),
571*9860b763SAndroid Build Coastguard Worker Tag::RootOfTrust => KeyParam::RootOfTrust(<Vec<u8>>::from_cbor_value(raw)?),
572*9860b763SAndroid Build Coastguard Worker Tag::OsVersion => KeyParam::OsVersion(<u32>::from_cbor_value(raw)?),
573*9860b763SAndroid Build Coastguard Worker Tag::OsPatchlevel => KeyParam::OsPatchlevel(<u32>::from_cbor_value(raw)?),
574*9860b763SAndroid Build Coastguard Worker Tag::AttestationChallenge => {
575*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationChallenge(<Vec<u8>>::from_cbor_value(raw)?)
576*9860b763SAndroid Build Coastguard Worker }
577*9860b763SAndroid Build Coastguard Worker Tag::AttestationApplicationId => {
578*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationApplicationId(<Vec<u8>>::from_cbor_value(raw)?)
579*9860b763SAndroid Build Coastguard Worker }
580*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdBrand => {
581*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdBrand(<Vec<u8>>::from_cbor_value(raw)?)
582*9860b763SAndroid Build Coastguard Worker }
583*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdDevice => {
584*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdDevice(<Vec<u8>>::from_cbor_value(raw)?)
585*9860b763SAndroid Build Coastguard Worker }
586*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdProduct => {
587*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdProduct(<Vec<u8>>::from_cbor_value(raw)?)
588*9860b763SAndroid Build Coastguard Worker }
589*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdSerial => {
590*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdSerial(<Vec<u8>>::from_cbor_value(raw)?)
591*9860b763SAndroid Build Coastguard Worker }
592*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdImei => KeyParam::AttestationIdImei(<Vec<u8>>::from_cbor_value(raw)?),
593*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v3")]
594*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdSecondImei => {
595*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdSecondImei(<Vec<u8>>::from_cbor_value(raw)?)
596*9860b763SAndroid Build Coastguard Worker }
597*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdMeid => KeyParam::AttestationIdMeid(<Vec<u8>>::from_cbor_value(raw)?),
598*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdManufacturer => {
599*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdManufacturer(<Vec<u8>>::from_cbor_value(raw)?)
600*9860b763SAndroid Build Coastguard Worker }
601*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdModel => {
602*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdModel(<Vec<u8>>::from_cbor_value(raw)?)
603*9860b763SAndroid Build Coastguard Worker }
604*9860b763SAndroid Build Coastguard Worker Tag::VendorPatchlevel => KeyParam::VendorPatchlevel(<u32>::from_cbor_value(raw)?),
605*9860b763SAndroid Build Coastguard Worker Tag::BootPatchlevel => KeyParam::BootPatchlevel(<u32>::from_cbor_value(raw)?),
606*9860b763SAndroid Build Coastguard Worker Tag::DeviceUniqueAttestation => {
607*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
608*9860b763SAndroid Build Coastguard Worker KeyParam::DeviceUniqueAttestation
609*9860b763SAndroid Build Coastguard Worker }
610*9860b763SAndroid Build Coastguard Worker Tag::StorageKey => KeyParam::StorageKey,
611*9860b763SAndroid Build Coastguard Worker Tag::Nonce => KeyParam::Nonce(<Vec<u8>>::from_cbor_value(raw)?),
612*9860b763SAndroid Build Coastguard Worker Tag::MacLength => KeyParam::MacLength(<u32>::from_cbor_value(raw)?),
613*9860b763SAndroid Build Coastguard Worker Tag::ResetSinceIdRotation => {
614*9860b763SAndroid Build Coastguard Worker check_bool(raw)?;
615*9860b763SAndroid Build Coastguard Worker KeyParam::ResetSinceIdRotation
616*9860b763SAndroid Build Coastguard Worker }
617*9860b763SAndroid Build Coastguard Worker Tag::CertificateSerial => KeyParam::CertificateSerial(<Vec<u8>>::from_cbor_value(raw)?),
618*9860b763SAndroid Build Coastguard Worker Tag::CertificateSubject => {
619*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateSubject(<Vec<u8>>::from_cbor_value(raw)?)
620*9860b763SAndroid Build Coastguard Worker }
621*9860b763SAndroid Build Coastguard Worker Tag::CertificateNotBefore => {
622*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateNotBefore(<DateTime>::from_cbor_value(raw)?)
623*9860b763SAndroid Build Coastguard Worker }
624*9860b763SAndroid Build Coastguard Worker Tag::CertificateNotAfter => {
625*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateNotAfter(<DateTime>::from_cbor_value(raw)?)
626*9860b763SAndroid Build Coastguard Worker }
627*9860b763SAndroid Build Coastguard Worker Tag::MaxBootLevel => KeyParam::MaxBootLevel(<u32>::from_cbor_value(raw)?),
628*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v4")]
629*9860b763SAndroid Build Coastguard Worker Tag::ModuleHash => KeyParam::ModuleHash(<Vec<u8>>::from_cbor_value(raw)?),
630*9860b763SAndroid Build Coastguard Worker
631*9860b763SAndroid Build Coastguard Worker _ => return Err(crate::CborError::UnexpectedItem("tag", "known tag")),
632*9860b763SAndroid Build Coastguard Worker })
633*9860b763SAndroid Build Coastguard Worker }
to_cbor_value(self) -> Result<cbor::value::Value, crate::CborError>634*9860b763SAndroid Build Coastguard Worker fn to_cbor_value(self) -> Result<cbor::value::Value, crate::CborError> {
635*9860b763SAndroid Build Coastguard Worker let (tag, val) = match self {
636*9860b763SAndroid Build Coastguard Worker KeyParam::Algorithm(v) => (Tag::Algorithm, v.to_cbor_value()?),
637*9860b763SAndroid Build Coastguard Worker KeyParam::BlockMode(v) => (Tag::BlockMode, v.to_cbor_value()?),
638*9860b763SAndroid Build Coastguard Worker KeyParam::Padding(v) => (Tag::Padding, v.to_cbor_value()?),
639*9860b763SAndroid Build Coastguard Worker KeyParam::Digest(v) => (Tag::Digest, v.to_cbor_value()?),
640*9860b763SAndroid Build Coastguard Worker KeyParam::EcCurve(v) => (Tag::EcCurve, v.to_cbor_value()?),
641*9860b763SAndroid Build Coastguard Worker KeyParam::Origin(v) => (Tag::Origin, v.to_cbor_value()?),
642*9860b763SAndroid Build Coastguard Worker KeyParam::Purpose(v) => (Tag::Purpose, v.to_cbor_value()?),
643*9860b763SAndroid Build Coastguard Worker KeyParam::KeySize(v) => (Tag::KeySize, v.to_cbor_value()?),
644*9860b763SAndroid Build Coastguard Worker KeyParam::CallerNonce => (Tag::CallerNonce, true.to_cbor_value()?),
645*9860b763SAndroid Build Coastguard Worker KeyParam::MinMacLength(v) => (Tag::MinMacLength, v.to_cbor_value()?),
646*9860b763SAndroid Build Coastguard Worker KeyParam::RsaPublicExponent(v) => (Tag::RsaPublicExponent, v.to_cbor_value()?),
647*9860b763SAndroid Build Coastguard Worker KeyParam::IncludeUniqueId => (Tag::IncludeUniqueId, true.to_cbor_value()?),
648*9860b763SAndroid Build Coastguard Worker KeyParam::RsaOaepMgfDigest(v) => (Tag::RsaOaepMgfDigest, v.to_cbor_value()?),
649*9860b763SAndroid Build Coastguard Worker KeyParam::BootloaderOnly => (Tag::BootloaderOnly, true.to_cbor_value()?),
650*9860b763SAndroid Build Coastguard Worker KeyParam::RollbackResistance => (Tag::RollbackResistance, true.to_cbor_value()?),
651*9860b763SAndroid Build Coastguard Worker KeyParam::EarlyBootOnly => (Tag::EarlyBootOnly, true.to_cbor_value()?),
652*9860b763SAndroid Build Coastguard Worker KeyParam::ActiveDatetime(v) => (Tag::ActiveDatetime, v.to_cbor_value()?),
653*9860b763SAndroid Build Coastguard Worker KeyParam::OriginationExpireDatetime(v) => {
654*9860b763SAndroid Build Coastguard Worker (Tag::OriginationExpireDatetime, v.to_cbor_value()?)
655*9860b763SAndroid Build Coastguard Worker }
656*9860b763SAndroid Build Coastguard Worker KeyParam::UsageExpireDatetime(v) => (Tag::UsageExpireDatetime, v.to_cbor_value()?),
657*9860b763SAndroid Build Coastguard Worker KeyParam::MaxUsesPerBoot(v) => (Tag::MaxUsesPerBoot, v.to_cbor_value()?),
658*9860b763SAndroid Build Coastguard Worker KeyParam::UsageCountLimit(v) => (Tag::UsageCountLimit, v.to_cbor_value()?),
659*9860b763SAndroid Build Coastguard Worker KeyParam::UserId(v) => (Tag::UserId, v.to_cbor_value()?),
660*9860b763SAndroid Build Coastguard Worker KeyParam::UserSecureId(v) => (Tag::UserSecureId, v.to_cbor_value()?),
661*9860b763SAndroid Build Coastguard Worker KeyParam::NoAuthRequired => (Tag::NoAuthRequired, true.to_cbor_value()?),
662*9860b763SAndroid Build Coastguard Worker KeyParam::UserAuthType(v) => (Tag::UserAuthType, v.to_cbor_value()?),
663*9860b763SAndroid Build Coastguard Worker KeyParam::AuthTimeout(v) => (Tag::AuthTimeout, v.to_cbor_value()?),
664*9860b763SAndroid Build Coastguard Worker KeyParam::AllowWhileOnBody => (Tag::AllowWhileOnBody, true.to_cbor_value()?),
665*9860b763SAndroid Build Coastguard Worker KeyParam::TrustedUserPresenceRequired => {
666*9860b763SAndroid Build Coastguard Worker (Tag::TrustedUserPresenceRequired, true.to_cbor_value()?)
667*9860b763SAndroid Build Coastguard Worker }
668*9860b763SAndroid Build Coastguard Worker KeyParam::TrustedConfirmationRequired => {
669*9860b763SAndroid Build Coastguard Worker (Tag::TrustedConfirmationRequired, true.to_cbor_value()?)
670*9860b763SAndroid Build Coastguard Worker }
671*9860b763SAndroid Build Coastguard Worker KeyParam::UnlockedDeviceRequired => {
672*9860b763SAndroid Build Coastguard Worker (Tag::UnlockedDeviceRequired, true.to_cbor_value()?)
673*9860b763SAndroid Build Coastguard Worker }
674*9860b763SAndroid Build Coastguard Worker KeyParam::ApplicationId(v) => (Tag::ApplicationId, v.to_cbor_value()?),
675*9860b763SAndroid Build Coastguard Worker KeyParam::ApplicationData(v) => (Tag::ApplicationData, v.to_cbor_value()?),
676*9860b763SAndroid Build Coastguard Worker KeyParam::CreationDatetime(v) => (Tag::CreationDatetime, v.to_cbor_value()?),
677*9860b763SAndroid Build Coastguard Worker KeyParam::RootOfTrust(v) => (Tag::RootOfTrust, v.to_cbor_value()?),
678*9860b763SAndroid Build Coastguard Worker KeyParam::OsVersion(v) => (Tag::OsVersion, v.to_cbor_value()?),
679*9860b763SAndroid Build Coastguard Worker KeyParam::OsPatchlevel(v) => (Tag::OsPatchlevel, v.to_cbor_value()?),
680*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationChallenge(v) => (Tag::AttestationChallenge, v.to_cbor_value()?),
681*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationApplicationId(v) => {
682*9860b763SAndroid Build Coastguard Worker (Tag::AttestationApplicationId, v.to_cbor_value()?)
683*9860b763SAndroid Build Coastguard Worker }
684*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdBrand(v) => (Tag::AttestationIdBrand, v.to_cbor_value()?),
685*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdDevice(v) => (Tag::AttestationIdDevice, v.to_cbor_value()?),
686*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdProduct(v) => (Tag::AttestationIdProduct, v.to_cbor_value()?),
687*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdSerial(v) => (Tag::AttestationIdSerial, v.to_cbor_value()?),
688*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdImei(v) => (Tag::AttestationIdImei, v.to_cbor_value()?),
689*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v3")]
690*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdSecondImei(v) => {
691*9860b763SAndroid Build Coastguard Worker (Tag::AttestationIdSecondImei, v.to_cbor_value()?)
692*9860b763SAndroid Build Coastguard Worker }
693*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdMeid(v) => (Tag::AttestationIdMeid, v.to_cbor_value()?),
694*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdManufacturer(v) => {
695*9860b763SAndroid Build Coastguard Worker (Tag::AttestationIdManufacturer, v.to_cbor_value()?)
696*9860b763SAndroid Build Coastguard Worker }
697*9860b763SAndroid Build Coastguard Worker KeyParam::AttestationIdModel(v) => (Tag::AttestationIdModel, v.to_cbor_value()?),
698*9860b763SAndroid Build Coastguard Worker KeyParam::VendorPatchlevel(v) => (Tag::VendorPatchlevel, v.to_cbor_value()?),
699*9860b763SAndroid Build Coastguard Worker KeyParam::BootPatchlevel(v) => (Tag::BootPatchlevel, v.to_cbor_value()?),
700*9860b763SAndroid Build Coastguard Worker KeyParam::DeviceUniqueAttestation => {
701*9860b763SAndroid Build Coastguard Worker (Tag::DeviceUniqueAttestation, true.to_cbor_value()?)
702*9860b763SAndroid Build Coastguard Worker }
703*9860b763SAndroid Build Coastguard Worker KeyParam::StorageKey => (Tag::StorageKey, true.to_cbor_value()?),
704*9860b763SAndroid Build Coastguard Worker KeyParam::Nonce(v) => (Tag::Nonce, v.to_cbor_value()?),
705*9860b763SAndroid Build Coastguard Worker KeyParam::MacLength(v) => (Tag::MacLength, v.to_cbor_value()?),
706*9860b763SAndroid Build Coastguard Worker KeyParam::ResetSinceIdRotation => (Tag::ResetSinceIdRotation, true.to_cbor_value()?),
707*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateSerial(v) => (Tag::CertificateSerial, v.to_cbor_value()?),
708*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateSubject(v) => (Tag::CertificateSubject, v.to_cbor_value()?),
709*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateNotBefore(v) => (Tag::CertificateNotBefore, v.to_cbor_value()?),
710*9860b763SAndroid Build Coastguard Worker KeyParam::CertificateNotAfter(v) => (Tag::CertificateNotAfter, v.to_cbor_value()?),
711*9860b763SAndroid Build Coastguard Worker KeyParam::MaxBootLevel(v) => (Tag::MaxBootLevel, v.to_cbor_value()?),
712*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v4")]
713*9860b763SAndroid Build Coastguard Worker KeyParam::ModuleHash(v) => (Tag::ModuleHash, v.to_cbor_value()?),
714*9860b763SAndroid Build Coastguard Worker };
715*9860b763SAndroid Build Coastguard Worker Ok(cbor::value::Value::Array(vec_try![tag.to_cbor_value()?, val]?))
716*9860b763SAndroid Build Coastguard Worker }
cddl_typename() -> Option<String>717*9860b763SAndroid Build Coastguard Worker fn cddl_typename() -> Option<String> {
718*9860b763SAndroid Build Coastguard Worker Some("KeyParam".to_string())
719*9860b763SAndroid Build Coastguard Worker }
cddl_schema() -> Option<String>720*9860b763SAndroid Build Coastguard Worker fn cddl_schema() -> Option<String> {
721*9860b763SAndroid Build Coastguard Worker let mut result = "&(\n".to_string();
722*9860b763SAndroid Build Coastguard Worker
723*9860b763SAndroid Build Coastguard Worker result += &format!(
724*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
725*9860b763SAndroid Build Coastguard Worker Tag::Algorithm as i32,
726*9860b763SAndroid Build Coastguard Worker Algorithm::cddl_ref(),
727*9860b763SAndroid Build Coastguard Worker "Tag_Algorithm"
728*9860b763SAndroid Build Coastguard Worker );
729*9860b763SAndroid Build Coastguard Worker result += &format!(
730*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
731*9860b763SAndroid Build Coastguard Worker Tag::BlockMode as i32,
732*9860b763SAndroid Build Coastguard Worker BlockMode::cddl_ref(),
733*9860b763SAndroid Build Coastguard Worker "Tag_BlockMode",
734*9860b763SAndroid Build Coastguard Worker );
735*9860b763SAndroid Build Coastguard Worker result += &format!(
736*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
737*9860b763SAndroid Build Coastguard Worker Tag::Padding as i32,
738*9860b763SAndroid Build Coastguard Worker PaddingMode::cddl_ref(),
739*9860b763SAndroid Build Coastguard Worker "Tag_Padding",
740*9860b763SAndroid Build Coastguard Worker );
741*9860b763SAndroid Build Coastguard Worker result +=
742*9860b763SAndroid Build Coastguard Worker &format!(" [{}, {}], ; {}\n", Tag::Digest as i32, Digest::cddl_ref(), "Tag_Digest",);
743*9860b763SAndroid Build Coastguard Worker result += &format!(
744*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
745*9860b763SAndroid Build Coastguard Worker Tag::EcCurve as i32,
746*9860b763SAndroid Build Coastguard Worker EcCurve::cddl_ref(),
747*9860b763SAndroid Build Coastguard Worker "Tag_EcCurve",
748*9860b763SAndroid Build Coastguard Worker );
749*9860b763SAndroid Build Coastguard Worker result += &format!(
750*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
751*9860b763SAndroid Build Coastguard Worker Tag::Origin as i32,
752*9860b763SAndroid Build Coastguard Worker KeyOrigin::cddl_ref(),
753*9860b763SAndroid Build Coastguard Worker "Tag_Origin",
754*9860b763SAndroid Build Coastguard Worker );
755*9860b763SAndroid Build Coastguard Worker result += &format!(
756*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
757*9860b763SAndroid Build Coastguard Worker Tag::Purpose as i32,
758*9860b763SAndroid Build Coastguard Worker KeyPurpose::cddl_ref(),
759*9860b763SAndroid Build Coastguard Worker "Tag_Purpose",
760*9860b763SAndroid Build Coastguard Worker );
761*9860b763SAndroid Build Coastguard Worker result += &format!(
762*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
763*9860b763SAndroid Build Coastguard Worker Tag::KeySize as i32,
764*9860b763SAndroid Build Coastguard Worker KeySizeInBits::cddl_ref(),
765*9860b763SAndroid Build Coastguard Worker "Tag_KeySize",
766*9860b763SAndroid Build Coastguard Worker );
767*9860b763SAndroid Build Coastguard Worker result += &format!(
768*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
769*9860b763SAndroid Build Coastguard Worker Tag::CallerNonce as i32,
770*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
771*9860b763SAndroid Build Coastguard Worker "Tag_CallerNonce",
772*9860b763SAndroid Build Coastguard Worker );
773*9860b763SAndroid Build Coastguard Worker result += &format!(
774*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
775*9860b763SAndroid Build Coastguard Worker Tag::MinMacLength as i32,
776*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
777*9860b763SAndroid Build Coastguard Worker "Tag_MinMacLength",
778*9860b763SAndroid Build Coastguard Worker );
779*9860b763SAndroid Build Coastguard Worker result += &format!(
780*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
781*9860b763SAndroid Build Coastguard Worker Tag::RsaPublicExponent as i32,
782*9860b763SAndroid Build Coastguard Worker RsaExponent::cddl_ref(),
783*9860b763SAndroid Build Coastguard Worker "Tag_RsaPublicExponent",
784*9860b763SAndroid Build Coastguard Worker );
785*9860b763SAndroid Build Coastguard Worker result += &format!(
786*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
787*9860b763SAndroid Build Coastguard Worker Tag::IncludeUniqueId as i32,
788*9860b763SAndroid Build Coastguard Worker "true",
789*9860b763SAndroid Build Coastguard Worker "Tag_IncludeUniqueId",
790*9860b763SAndroid Build Coastguard Worker );
791*9860b763SAndroid Build Coastguard Worker result += &format!(
792*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
793*9860b763SAndroid Build Coastguard Worker Tag::RsaOaepMgfDigest as i32,
794*9860b763SAndroid Build Coastguard Worker Digest::cddl_ref(),
795*9860b763SAndroid Build Coastguard Worker "Tag_RsaOaepMgfDigest",
796*9860b763SAndroid Build Coastguard Worker );
797*9860b763SAndroid Build Coastguard Worker result += &format!(
798*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
799*9860b763SAndroid Build Coastguard Worker Tag::BootloaderOnly as i32,
800*9860b763SAndroid Build Coastguard Worker "true",
801*9860b763SAndroid Build Coastguard Worker "Tag_BootloaderOnly",
802*9860b763SAndroid Build Coastguard Worker );
803*9860b763SAndroid Build Coastguard Worker result += &format!(
804*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
805*9860b763SAndroid Build Coastguard Worker Tag::RollbackResistance as i32,
806*9860b763SAndroid Build Coastguard Worker "true",
807*9860b763SAndroid Build Coastguard Worker "Tag_RollbackResistance",
808*9860b763SAndroid Build Coastguard Worker );
809*9860b763SAndroid Build Coastguard Worker result += &format!(
810*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
811*9860b763SAndroid Build Coastguard Worker Tag::EarlyBootOnly as i32,
812*9860b763SAndroid Build Coastguard Worker "true",
813*9860b763SAndroid Build Coastguard Worker "Tag_EarlyBootOnly",
814*9860b763SAndroid Build Coastguard Worker );
815*9860b763SAndroid Build Coastguard Worker result += &format!(
816*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
817*9860b763SAndroid Build Coastguard Worker Tag::ActiveDatetime as i32,
818*9860b763SAndroid Build Coastguard Worker DateTime::cddl_ref(),
819*9860b763SAndroid Build Coastguard Worker "Tag_ActiveDatetime",
820*9860b763SAndroid Build Coastguard Worker );
821*9860b763SAndroid Build Coastguard Worker result += &format!(
822*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
823*9860b763SAndroid Build Coastguard Worker Tag::OriginationExpireDatetime as i32,
824*9860b763SAndroid Build Coastguard Worker DateTime::cddl_ref(),
825*9860b763SAndroid Build Coastguard Worker "Tag_OriginationExpireDatetime",
826*9860b763SAndroid Build Coastguard Worker );
827*9860b763SAndroid Build Coastguard Worker result += &format!(
828*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
829*9860b763SAndroid Build Coastguard Worker Tag::UsageExpireDatetime as i32,
830*9860b763SAndroid Build Coastguard Worker DateTime::cddl_ref(),
831*9860b763SAndroid Build Coastguard Worker "Tag_UsageExpireDatetime",
832*9860b763SAndroid Build Coastguard Worker );
833*9860b763SAndroid Build Coastguard Worker result += &format!(
834*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
835*9860b763SAndroid Build Coastguard Worker Tag::MaxUsesPerBoot as i32,
836*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
837*9860b763SAndroid Build Coastguard Worker "Tag_MaxUsesPerBoot",
838*9860b763SAndroid Build Coastguard Worker );
839*9860b763SAndroid Build Coastguard Worker result += &format!(
840*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
841*9860b763SAndroid Build Coastguard Worker Tag::UsageCountLimit as i32,
842*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
843*9860b763SAndroid Build Coastguard Worker "Tag_UsageCountLimit",
844*9860b763SAndroid Build Coastguard Worker );
845*9860b763SAndroid Build Coastguard Worker result +=
846*9860b763SAndroid Build Coastguard Worker &format!(" [{}, {}], ; {}\n", Tag::UserId as i32, u32::cddl_ref(), "Tag_UserId",);
847*9860b763SAndroid Build Coastguard Worker result += &format!(
848*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
849*9860b763SAndroid Build Coastguard Worker Tag::UserSecureId as i32,
850*9860b763SAndroid Build Coastguard Worker u64::cddl_ref(),
851*9860b763SAndroid Build Coastguard Worker "Tag_UserSecureId",
852*9860b763SAndroid Build Coastguard Worker );
853*9860b763SAndroid Build Coastguard Worker result += &format!(
854*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
855*9860b763SAndroid Build Coastguard Worker Tag::NoAuthRequired as i32,
856*9860b763SAndroid Build Coastguard Worker "true",
857*9860b763SAndroid Build Coastguard Worker "Tag_NoAuthRequired",
858*9860b763SAndroid Build Coastguard Worker );
859*9860b763SAndroid Build Coastguard Worker result += &format!(
860*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
861*9860b763SAndroid Build Coastguard Worker Tag::UserAuthType as i32,
862*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
863*9860b763SAndroid Build Coastguard Worker "Tag_UserAuthType",
864*9860b763SAndroid Build Coastguard Worker );
865*9860b763SAndroid Build Coastguard Worker result += &format!(
866*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
867*9860b763SAndroid Build Coastguard Worker Tag::AuthTimeout as i32,
868*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
869*9860b763SAndroid Build Coastguard Worker "Tag_AuthTimeout",
870*9860b763SAndroid Build Coastguard Worker );
871*9860b763SAndroid Build Coastguard Worker result += &format!(
872*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
873*9860b763SAndroid Build Coastguard Worker Tag::AllowWhileOnBody as i32,
874*9860b763SAndroid Build Coastguard Worker "true",
875*9860b763SAndroid Build Coastguard Worker "Tag_AllowWhileOnBody",
876*9860b763SAndroid Build Coastguard Worker );
877*9860b763SAndroid Build Coastguard Worker result += &format!(
878*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
879*9860b763SAndroid Build Coastguard Worker Tag::TrustedUserPresenceRequired as i32,
880*9860b763SAndroid Build Coastguard Worker "true",
881*9860b763SAndroid Build Coastguard Worker "Tag_TrustedUserPresenceRequired",
882*9860b763SAndroid Build Coastguard Worker );
883*9860b763SAndroid Build Coastguard Worker result += &format!(
884*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
885*9860b763SAndroid Build Coastguard Worker Tag::TrustedConfirmationRequired as i32,
886*9860b763SAndroid Build Coastguard Worker "true",
887*9860b763SAndroid Build Coastguard Worker "Tag_TrustedConfirmationRequired",
888*9860b763SAndroid Build Coastguard Worker );
889*9860b763SAndroid Build Coastguard Worker result += &format!(
890*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
891*9860b763SAndroid Build Coastguard Worker Tag::UnlockedDeviceRequired as i32,
892*9860b763SAndroid Build Coastguard Worker "true",
893*9860b763SAndroid Build Coastguard Worker "Tag_UnlockedDeviceRequired",
894*9860b763SAndroid Build Coastguard Worker );
895*9860b763SAndroid Build Coastguard Worker result += &format!(
896*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
897*9860b763SAndroid Build Coastguard Worker Tag::ApplicationId as i32,
898*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
899*9860b763SAndroid Build Coastguard Worker "Tag_ApplicationId",
900*9860b763SAndroid Build Coastguard Worker );
901*9860b763SAndroid Build Coastguard Worker result += &format!(
902*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
903*9860b763SAndroid Build Coastguard Worker Tag::ApplicationData as i32,
904*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
905*9860b763SAndroid Build Coastguard Worker "Tag_ApplicationData",
906*9860b763SAndroid Build Coastguard Worker );
907*9860b763SAndroid Build Coastguard Worker result += &format!(
908*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
909*9860b763SAndroid Build Coastguard Worker Tag::CreationDatetime as i32,
910*9860b763SAndroid Build Coastguard Worker DateTime::cddl_ref(),
911*9860b763SAndroid Build Coastguard Worker "Tag_CreationDatetime",
912*9860b763SAndroid Build Coastguard Worker );
913*9860b763SAndroid Build Coastguard Worker result += &format!(
914*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
915*9860b763SAndroid Build Coastguard Worker Tag::RootOfTrust as i32,
916*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
917*9860b763SAndroid Build Coastguard Worker "Tag_RootOfTrust",
918*9860b763SAndroid Build Coastguard Worker );
919*9860b763SAndroid Build Coastguard Worker result += &format!(
920*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
921*9860b763SAndroid Build Coastguard Worker Tag::OsVersion as i32,
922*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
923*9860b763SAndroid Build Coastguard Worker "Tag_OsVersion",
924*9860b763SAndroid Build Coastguard Worker );
925*9860b763SAndroid Build Coastguard Worker result += &format!(
926*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
927*9860b763SAndroid Build Coastguard Worker Tag::OsPatchlevel as i32,
928*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
929*9860b763SAndroid Build Coastguard Worker "Tag_OsPatchlevel",
930*9860b763SAndroid Build Coastguard Worker );
931*9860b763SAndroid Build Coastguard Worker result += &format!(
932*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
933*9860b763SAndroid Build Coastguard Worker Tag::AttestationChallenge as i32,
934*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
935*9860b763SAndroid Build Coastguard Worker "Tag_AttestationChallenge",
936*9860b763SAndroid Build Coastguard Worker );
937*9860b763SAndroid Build Coastguard Worker result += &format!(
938*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
939*9860b763SAndroid Build Coastguard Worker Tag::AttestationApplicationId as i32,
940*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
941*9860b763SAndroid Build Coastguard Worker "Tag_AttestationApplicationId",
942*9860b763SAndroid Build Coastguard Worker );
943*9860b763SAndroid Build Coastguard Worker result += &format!(
944*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
945*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdBrand as i32,
946*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
947*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdBrand",
948*9860b763SAndroid Build Coastguard Worker );
949*9860b763SAndroid Build Coastguard Worker result += &format!(
950*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
951*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdDevice as i32,
952*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
953*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdDevice",
954*9860b763SAndroid Build Coastguard Worker );
955*9860b763SAndroid Build Coastguard Worker result += &format!(
956*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
957*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdProduct as i32,
958*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
959*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdProduct",
960*9860b763SAndroid Build Coastguard Worker );
961*9860b763SAndroid Build Coastguard Worker result += &format!(
962*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
963*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdSerial as i32,
964*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
965*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdSerial",
966*9860b763SAndroid Build Coastguard Worker );
967*9860b763SAndroid Build Coastguard Worker result += &format!(
968*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
969*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdImei as i32,
970*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
971*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdImei",
972*9860b763SAndroid Build Coastguard Worker );
973*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v3")]
974*9860b763SAndroid Build Coastguard Worker {
975*9860b763SAndroid Build Coastguard Worker result += &format!(
976*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
977*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdSecondImei as i32,
978*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
979*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdSecondImei",
980*9860b763SAndroid Build Coastguard Worker );
981*9860b763SAndroid Build Coastguard Worker }
982*9860b763SAndroid Build Coastguard Worker result += &format!(
983*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
984*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdMeid as i32,
985*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
986*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdMeid",
987*9860b763SAndroid Build Coastguard Worker );
988*9860b763SAndroid Build Coastguard Worker result += &format!(
989*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
990*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdManufacturer as i32,
991*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
992*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdManufacturer",
993*9860b763SAndroid Build Coastguard Worker );
994*9860b763SAndroid Build Coastguard Worker result += &format!(
995*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
996*9860b763SAndroid Build Coastguard Worker Tag::AttestationIdModel as i32,
997*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
998*9860b763SAndroid Build Coastguard Worker "Tag_AttestationIdModel",
999*9860b763SAndroid Build Coastguard Worker );
1000*9860b763SAndroid Build Coastguard Worker result += &format!(
1001*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1002*9860b763SAndroid Build Coastguard Worker Tag::VendorPatchlevel as i32,
1003*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
1004*9860b763SAndroid Build Coastguard Worker "Tag_VendorPatchlevel",
1005*9860b763SAndroid Build Coastguard Worker );
1006*9860b763SAndroid Build Coastguard Worker result += &format!(
1007*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1008*9860b763SAndroid Build Coastguard Worker Tag::BootPatchlevel as i32,
1009*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
1010*9860b763SAndroid Build Coastguard Worker "Tag_BootPatchlevel",
1011*9860b763SAndroid Build Coastguard Worker );
1012*9860b763SAndroid Build Coastguard Worker result += &format!(
1013*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1014*9860b763SAndroid Build Coastguard Worker Tag::DeviceUniqueAttestation as i32,
1015*9860b763SAndroid Build Coastguard Worker "true",
1016*9860b763SAndroid Build Coastguard Worker "Tag_DeviceUniqueAttestation",
1017*9860b763SAndroid Build Coastguard Worker );
1018*9860b763SAndroid Build Coastguard Worker result +=
1019*9860b763SAndroid Build Coastguard Worker &format!(" [{}, {}], ; {}\n", Tag::StorageKey as i32, "true", "Tag_StorageKey",);
1020*9860b763SAndroid Build Coastguard Worker result += &format!(
1021*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1022*9860b763SAndroid Build Coastguard Worker Tag::Nonce as i32,
1023*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
1024*9860b763SAndroid Build Coastguard Worker "Tag_Nonce",
1025*9860b763SAndroid Build Coastguard Worker );
1026*9860b763SAndroid Build Coastguard Worker result += &format!(
1027*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1028*9860b763SAndroid Build Coastguard Worker Tag::MacLength as i32,
1029*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
1030*9860b763SAndroid Build Coastguard Worker "Tag_MacLength",
1031*9860b763SAndroid Build Coastguard Worker );
1032*9860b763SAndroid Build Coastguard Worker result += &format!(
1033*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1034*9860b763SAndroid Build Coastguard Worker Tag::ResetSinceIdRotation as i32,
1035*9860b763SAndroid Build Coastguard Worker "true",
1036*9860b763SAndroid Build Coastguard Worker "Tag_ResetSinceIdRotation",
1037*9860b763SAndroid Build Coastguard Worker );
1038*9860b763SAndroid Build Coastguard Worker result += &format!(
1039*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1040*9860b763SAndroid Build Coastguard Worker Tag::CertificateSerial as i32,
1041*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
1042*9860b763SAndroid Build Coastguard Worker "Tag_CertificateSerial",
1043*9860b763SAndroid Build Coastguard Worker );
1044*9860b763SAndroid Build Coastguard Worker result += &format!(
1045*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1046*9860b763SAndroid Build Coastguard Worker Tag::CertificateSubject as i32,
1047*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
1048*9860b763SAndroid Build Coastguard Worker "Tag_CertificateSubject",
1049*9860b763SAndroid Build Coastguard Worker );
1050*9860b763SAndroid Build Coastguard Worker result += &format!(
1051*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1052*9860b763SAndroid Build Coastguard Worker Tag::CertificateNotBefore as i32,
1053*9860b763SAndroid Build Coastguard Worker DateTime::cddl_ref(),
1054*9860b763SAndroid Build Coastguard Worker "Tag_CertificateNotBefore",
1055*9860b763SAndroid Build Coastguard Worker );
1056*9860b763SAndroid Build Coastguard Worker result += &format!(
1057*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1058*9860b763SAndroid Build Coastguard Worker Tag::CertificateNotAfter as i32,
1059*9860b763SAndroid Build Coastguard Worker DateTime::cddl_ref(),
1060*9860b763SAndroid Build Coastguard Worker "Tag_CertificateNotAfter",
1061*9860b763SAndroid Build Coastguard Worker );
1062*9860b763SAndroid Build Coastguard Worker result += &format!(
1063*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1064*9860b763SAndroid Build Coastguard Worker Tag::MaxBootLevel as i32,
1065*9860b763SAndroid Build Coastguard Worker u32::cddl_ref(),
1066*9860b763SAndroid Build Coastguard Worker "Tag_MaxBootLevel",
1067*9860b763SAndroid Build Coastguard Worker );
1068*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v4")]
1069*9860b763SAndroid Build Coastguard Worker {
1070*9860b763SAndroid Build Coastguard Worker result += &format!(
1071*9860b763SAndroid Build Coastguard Worker " [{}, {}], ; {}\n",
1072*9860b763SAndroid Build Coastguard Worker Tag::ModuleHash as i32,
1073*9860b763SAndroid Build Coastguard Worker Vec::<u8>::cddl_ref(),
1074*9860b763SAndroid Build Coastguard Worker "Tag_ModuleHash",
1075*9860b763SAndroid Build Coastguard Worker );
1076*9860b763SAndroid Build Coastguard Worker }
1077*9860b763SAndroid Build Coastguard Worker result += ")";
1078*9860b763SAndroid Build Coastguard Worker Some(result)
1079*9860b763SAndroid Build Coastguard Worker }
1080*9860b763SAndroid Build Coastguard Worker }
1081*9860b763SAndroid Build Coastguard Worker
1082*9860b763SAndroid Build Coastguard Worker /// Determine the tag type for a tag, based on the top 4 bits of the tag number.
tag_type(tag: Tag) -> TagType1083*9860b763SAndroid Build Coastguard Worker pub fn tag_type(tag: Tag) -> TagType {
1084*9860b763SAndroid Build Coastguard Worker match ((tag as u32) & 0xf0000000u32) as i32 {
1085*9860b763SAndroid Build Coastguard Worker x if x == TagType::Enum as i32 => TagType::Enum,
1086*9860b763SAndroid Build Coastguard Worker x if x == TagType::EnumRep as i32 => TagType::EnumRep,
1087*9860b763SAndroid Build Coastguard Worker x if x == TagType::Uint as i32 => TagType::Uint,
1088*9860b763SAndroid Build Coastguard Worker x if x == TagType::UintRep as i32 => TagType::UintRep,
1089*9860b763SAndroid Build Coastguard Worker x if x == TagType::Ulong as i32 => TagType::Ulong,
1090*9860b763SAndroid Build Coastguard Worker x if x == TagType::Date as i32 => TagType::Date,
1091*9860b763SAndroid Build Coastguard Worker x if x == TagType::Bool as i32 => TagType::Bool,
1092*9860b763SAndroid Build Coastguard Worker x if x == TagType::Bignum as i32 => TagType::Bignum,
1093*9860b763SAndroid Build Coastguard Worker x if x == TagType::Bytes as i32 => TagType::Bytes,
1094*9860b763SAndroid Build Coastguard Worker x if x == TagType::UlongRep as i32 => TagType::UlongRep,
1095*9860b763SAndroid Build Coastguard Worker _ => TagType::Invalid,
1096*9860b763SAndroid Build Coastguard Worker }
1097*9860b763SAndroid Build Coastguard Worker }
1098*9860b763SAndroid Build Coastguard Worker
1099*9860b763SAndroid Build Coastguard Worker /// Determine the raw tag value with tag type information stripped out.
raw_tag_value(tag: Tag) -> u321100*9860b763SAndroid Build Coastguard Worker pub fn raw_tag_value(tag: Tag) -> u32 {
1101*9860b763SAndroid Build Coastguard Worker (tag as u32) & 0x0fffffffu32
1102*9860b763SAndroid Build Coastguard Worker }
1103*9860b763SAndroid Build Coastguard Worker
1104*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
1105*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
1106*9860b763SAndroid Build Coastguard Worker pub enum KeyPurpose {
1107*9860b763SAndroid Build Coastguard Worker Encrypt = 0,
1108*9860b763SAndroid Build Coastguard Worker Decrypt = 1,
1109*9860b763SAndroid Build Coastguard Worker Sign = 2,
1110*9860b763SAndroid Build Coastguard Worker Verify = 3,
1111*9860b763SAndroid Build Coastguard Worker WrapKey = 5,
1112*9860b763SAndroid Build Coastguard Worker AgreeKey = 6,
1113*9860b763SAndroid Build Coastguard Worker AttestKey = 7,
1114*9860b763SAndroid Build Coastguard Worker }
1115*9860b763SAndroid Build Coastguard Worker try_from_n!(KeyPurpose);
1116*9860b763SAndroid Build Coastguard Worker
1117*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
1118*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
1119*9860b763SAndroid Build Coastguard Worker pub enum PaddingMode {
1120*9860b763SAndroid Build Coastguard Worker None = 1,
1121*9860b763SAndroid Build Coastguard Worker RsaOaep = 2,
1122*9860b763SAndroid Build Coastguard Worker RsaPss = 3,
1123*9860b763SAndroid Build Coastguard Worker RsaPkcs115Encrypt = 4,
1124*9860b763SAndroid Build Coastguard Worker RsaPkcs115Sign = 5,
1125*9860b763SAndroid Build Coastguard Worker Pkcs7 = 64,
1126*9860b763SAndroid Build Coastguard Worker }
1127*9860b763SAndroid Build Coastguard Worker try_from_n!(PaddingMode);
1128*9860b763SAndroid Build Coastguard Worker
1129*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, N)]
1130*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
1131*9860b763SAndroid Build Coastguard Worker pub enum SecurityLevel {
1132*9860b763SAndroid Build Coastguard Worker Software = 0,
1133*9860b763SAndroid Build Coastguard Worker TrustedEnvironment = 1,
1134*9860b763SAndroid Build Coastguard Worker Strongbox = 2,
1135*9860b763SAndroid Build Coastguard Worker Keystore = 100,
1136*9860b763SAndroid Build Coastguard Worker }
1137*9860b763SAndroid Build Coastguard Worker try_from_n!(SecurityLevel);
1138*9860b763SAndroid Build Coastguard Worker
1139*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, AsCborValue, FromRawTag, N)]
1140*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
1141*9860b763SAndroid Build Coastguard Worker pub enum Tag {
1142*9860b763SAndroid Build Coastguard Worker Invalid = 0,
1143*9860b763SAndroid Build Coastguard Worker Purpose = 536870913,
1144*9860b763SAndroid Build Coastguard Worker Algorithm = 268435458,
1145*9860b763SAndroid Build Coastguard Worker KeySize = 805306371,
1146*9860b763SAndroid Build Coastguard Worker BlockMode = 536870916,
1147*9860b763SAndroid Build Coastguard Worker Digest = 536870917,
1148*9860b763SAndroid Build Coastguard Worker Padding = 536870918,
1149*9860b763SAndroid Build Coastguard Worker CallerNonce = 1879048199,
1150*9860b763SAndroid Build Coastguard Worker MinMacLength = 805306376,
1151*9860b763SAndroid Build Coastguard Worker EcCurve = 268435466,
1152*9860b763SAndroid Build Coastguard Worker RsaPublicExponent = 1342177480,
1153*9860b763SAndroid Build Coastguard Worker IncludeUniqueId = 1879048394,
1154*9860b763SAndroid Build Coastguard Worker RsaOaepMgfDigest = 536871115,
1155*9860b763SAndroid Build Coastguard Worker BootloaderOnly = 1879048494,
1156*9860b763SAndroid Build Coastguard Worker RollbackResistance = 1879048495,
1157*9860b763SAndroid Build Coastguard Worker HardwareType = 268435760,
1158*9860b763SAndroid Build Coastguard Worker EarlyBootOnly = 1879048497,
1159*9860b763SAndroid Build Coastguard Worker ActiveDatetime = 1610613136,
1160*9860b763SAndroid Build Coastguard Worker OriginationExpireDatetime = 1610613137,
1161*9860b763SAndroid Build Coastguard Worker UsageExpireDatetime = 1610613138,
1162*9860b763SAndroid Build Coastguard Worker MinSecondsBetweenOps = 805306771,
1163*9860b763SAndroid Build Coastguard Worker MaxUsesPerBoot = 805306772,
1164*9860b763SAndroid Build Coastguard Worker UsageCountLimit = 805306773,
1165*9860b763SAndroid Build Coastguard Worker UserId = 805306869,
1166*9860b763SAndroid Build Coastguard Worker UserSecureId = -1610612234,
1167*9860b763SAndroid Build Coastguard Worker NoAuthRequired = 1879048695,
1168*9860b763SAndroid Build Coastguard Worker UserAuthType = 268435960,
1169*9860b763SAndroid Build Coastguard Worker AuthTimeout = 805306873,
1170*9860b763SAndroid Build Coastguard Worker AllowWhileOnBody = 1879048698,
1171*9860b763SAndroid Build Coastguard Worker TrustedUserPresenceRequired = 1879048699,
1172*9860b763SAndroid Build Coastguard Worker TrustedConfirmationRequired = 1879048700,
1173*9860b763SAndroid Build Coastguard Worker UnlockedDeviceRequired = 1879048701,
1174*9860b763SAndroid Build Coastguard Worker ApplicationId = -1879047591,
1175*9860b763SAndroid Build Coastguard Worker ApplicationData = -1879047492,
1176*9860b763SAndroid Build Coastguard Worker CreationDatetime = 1610613437,
1177*9860b763SAndroid Build Coastguard Worker Origin = 268436158,
1178*9860b763SAndroid Build Coastguard Worker RootOfTrust = -1879047488,
1179*9860b763SAndroid Build Coastguard Worker OsVersion = 805307073,
1180*9860b763SAndroid Build Coastguard Worker OsPatchlevel = 805307074,
1181*9860b763SAndroid Build Coastguard Worker UniqueId = -1879047485,
1182*9860b763SAndroid Build Coastguard Worker AttestationChallenge = -1879047484,
1183*9860b763SAndroid Build Coastguard Worker AttestationApplicationId = -1879047483,
1184*9860b763SAndroid Build Coastguard Worker AttestationIdBrand = -1879047482,
1185*9860b763SAndroid Build Coastguard Worker AttestationIdDevice = -1879047481,
1186*9860b763SAndroid Build Coastguard Worker AttestationIdProduct = -1879047480,
1187*9860b763SAndroid Build Coastguard Worker AttestationIdSerial = -1879047479,
1188*9860b763SAndroid Build Coastguard Worker AttestationIdImei = -1879047478,
1189*9860b763SAndroid Build Coastguard Worker AttestationIdMeid = -1879047477,
1190*9860b763SAndroid Build Coastguard Worker AttestationIdManufacturer = -1879047476,
1191*9860b763SAndroid Build Coastguard Worker AttestationIdModel = -1879047475,
1192*9860b763SAndroid Build Coastguard Worker VendorPatchlevel = 805307086,
1193*9860b763SAndroid Build Coastguard Worker BootPatchlevel = 805307087,
1194*9860b763SAndroid Build Coastguard Worker DeviceUniqueAttestation = 1879048912,
1195*9860b763SAndroid Build Coastguard Worker IdentityCredentialKey = 1879048913,
1196*9860b763SAndroid Build Coastguard Worker StorageKey = 1879048914,
1197*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v3")]
1198*9860b763SAndroid Build Coastguard Worker AttestationIdSecondImei = -1879047469,
1199*9860b763SAndroid Build Coastguard Worker AssociatedData = -1879047192,
1200*9860b763SAndroid Build Coastguard Worker Nonce = -1879047191,
1201*9860b763SAndroid Build Coastguard Worker MacLength = 805307371,
1202*9860b763SAndroid Build Coastguard Worker ResetSinceIdRotation = 1879049196,
1203*9860b763SAndroid Build Coastguard Worker ConfirmationToken = -1879047187,
1204*9860b763SAndroid Build Coastguard Worker CertificateSerial = -2147482642,
1205*9860b763SAndroid Build Coastguard Worker CertificateSubject = -1879047185,
1206*9860b763SAndroid Build Coastguard Worker CertificateNotBefore = 1610613744,
1207*9860b763SAndroid Build Coastguard Worker CertificateNotAfter = 1610613745,
1208*9860b763SAndroid Build Coastguard Worker MaxBootLevel = 805307378,
1209*9860b763SAndroid Build Coastguard Worker #[cfg(feature = "hal_v4")]
1210*9860b763SAndroid Build Coastguard Worker ModuleHash = -1879047468,
1211*9860b763SAndroid Build Coastguard Worker }
1212*9860b763SAndroid Build Coastguard Worker try_from_n!(Tag);
1213*9860b763SAndroid Build Coastguard Worker
1214*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Copy, Debug, PartialEq, Eq, AsCborValue, N)]
1215*9860b763SAndroid Build Coastguard Worker #[repr(i32)]
1216*9860b763SAndroid Build Coastguard Worker pub enum TagType {
1217*9860b763SAndroid Build Coastguard Worker Invalid = 0,
1218*9860b763SAndroid Build Coastguard Worker Enum = 268435456,
1219*9860b763SAndroid Build Coastguard Worker EnumRep = 536870912,
1220*9860b763SAndroid Build Coastguard Worker Uint = 805306368,
1221*9860b763SAndroid Build Coastguard Worker UintRep = 1073741824,
1222*9860b763SAndroid Build Coastguard Worker Ulong = 1342177280,
1223*9860b763SAndroid Build Coastguard Worker Date = 1610612736,
1224*9860b763SAndroid Build Coastguard Worker Bool = 1879048192,
1225*9860b763SAndroid Build Coastguard Worker Bignum = -2147483648,
1226*9860b763SAndroid Build Coastguard Worker Bytes = -1879048192,
1227*9860b763SAndroid Build Coastguard Worker UlongRep = -1610612736,
1228*9860b763SAndroid Build Coastguard Worker }
1229*9860b763SAndroid Build Coastguard Worker try_from_n!(TagType);
1230