Merge "keystore2: Prepare for future KeyMint::KeyPurpose values."
diff --git a/keystore2/src/km_compat/km_compat_type_conversion.h b/keystore2/src/km_compat/km_compat_type_conversion.h
index 97c61ce..57c837b 100644
--- a/keystore2/src/km_compat/km_compat_type_conversion.h
+++ b/keystore2/src/km_compat/km_compat_type_conversion.h
@@ -23,7 +23,7 @@
namespace V4_1 = ::android::hardware::keymaster::V4_1;
namespace KMV1 = ::aidl::android::hardware::security::keymint;
-static V4_0::KeyPurpose convert(KMV1::KeyPurpose p) {
+static std::optional<V4_0::KeyPurpose> convert(KMV1::KeyPurpose p) {
switch (p) {
case KMV1::KeyPurpose::ENCRYPT:
return V4_0::KeyPurpose::ENCRYPT;
@@ -35,6 +35,9 @@
return V4_0::KeyPurpose::VERIFY;
case KMV1::KeyPurpose::WRAP_KEY:
return V4_0::KeyPurpose::WRAP_KEY;
+ default:
+ // Can end up here because KeyMint may have KeyPurpose values not in KM4.
+ return {};
}
}
@@ -288,7 +291,10 @@
break;
case KMV1::Tag::PURPOSE:
if (auto v = KMV1::authorizationValue(KMV1::TAG_PURPOSE, kp)) {
- return V4_0::makeKeyParameter(V4_0::TAG_PURPOSE, convert(v->get()));
+ std::optional<V4_0::KeyPurpose> purpose = convert(v->get());
+ if (purpose) {
+ return V4_0::makeKeyParameter(V4_0::TAG_PURPOSE, purpose.value());
+ }
}
break;
case KMV1::Tag::ALGORITHM: