Change KeyMint KeyCharacteristics
Support key characteristics with three security levels, and don't
store unenforced authorizations with keys or bind them to keys.
Bug: 163606833
Test: atest VtsAidlKeyMintTargetTest
Change-Id: I5abadc892fe5909d297bd035cf6e582b21e57f5f
diff --git a/ng/KeyMintUtils.cpp b/ng/KeyMintUtils.cpp
index 4b2119b..730e282 100644
--- a/ng/KeyMintUtils.cpp
+++ b/ng/KeyMintUtils.cpp
@@ -122,49 +122,55 @@
return result;
}
+KeyParameter kmParam2Aidl(const keymaster_key_param_t& param) {
+ auto tag = legacy_enum_conversion(param.tag);
+ switch (typeFromTag(param.tag)) {
+ case KM_ENUM:
+ case KM_ENUM_REP:
+ return kmEnumParam2Aidl(param);
+ break;
+
+ case KM_UINT:
+ case KM_UINT_REP:
+ return KeyParameter{tag,
+ KeyParameterValue::make<KeyParameterValue::integer>(param.integer)};
+
+ case KM_ULONG:
+ case KM_ULONG_REP:
+ return KeyParameter{
+ tag, KeyParameterValue::make<KeyParameterValue::longInteger>(param.long_integer)};
+ break;
+
+ case KM_DATE:
+ return KeyParameter{tag,
+ KeyParameterValue::make<KeyParameterValue::dateTime>(param.date_time)};
+ break;
+
+ case KM_BOOL:
+ return KeyParameter{tag, param.boolean};
+ break;
+
+ case KM_BIGNUM:
+ case KM_BYTES:
+ return {tag, KeyParameterValue::make<KeyParameterValue::blob>(
+ std::vector(param.blob.data, param.blob.data + param.blob.data_length))};
+ break;
+
+ case KM_INVALID:
+ default:
+ CHECK(false) << "Unknown or unused tag type: Something is broken";
+ return KeyParameter{Tag::INVALID, false};
+ break;
+ }
+}
+
vector<KeyParameter> kmParamSet2Aidl(const keymaster_key_param_set_t& set) {
vector<KeyParameter> result;
if (set.length == 0 || set.params == nullptr) return result;
result.reserve(set.length);
- keymaster_key_param_t* params = set.params;
for (size_t i = 0; i < set.length; ++i) {
- auto tag = legacy_enum_conversion(params[i].tag);
- switch (typeFromTag(params[i].tag)) {
- case KM_ENUM:
- case KM_ENUM_REP:
- result.push_back(kmEnumParam2Aidl(params[i]));
- break;
- case KM_UINT:
- case KM_UINT_REP:
- result.push_back(KeyParameter{
- tag, KeyParameterValue::make<KeyParameterValue::integer>(params[i].integer)});
- break;
- case KM_ULONG:
- case KM_ULONG_REP:
- result.push_back(KeyParameter{
- tag,
- KeyParameterValue::make<KeyParameterValue::longInteger>(params[i].long_integer)});
- break;
- case KM_DATE:
- result.push_back(KeyParameter{
- tag, KeyParameterValue::make<KeyParameterValue::dateTime>(params[i].date_time)});
- break;
- case KM_BOOL:
- result.push_back(KeyParameter{tag, params[i].boolean});
- break;
- case KM_BIGNUM:
- case KM_BYTES:
- result.push_back(
- {tag, KeyParameterValue::make<KeyParameterValue::blob>(std::vector(
- params[i].blob.data, params[i].blob.data + params[i].blob.data_length))});
- break;
- case KM_INVALID:
- default:
- CHECK(false) << "Unknown or unused enum tag: Something is broken";
- result.push_back(KeyParameter{tag, false});
- break;
- }
+ result.push_back(kmParam2Aidl(set.params[i]));
}
return result;
}