Merge "Update NFC AIDL module to target SDK 35" into main
diff --git a/bluetooth/ranging/aidl/vts/Android.bp b/bluetooth/ranging/aidl/vts/Android.bp
index 9984ce8..bcae5d0 100644
--- a/bluetooth/ranging/aidl/vts/Android.bp
+++ b/bluetooth/ranging/aidl/vts/Android.bp
@@ -17,7 +17,7 @@
"libutils",
],
static_libs: [
- "android.hardware.bluetooth.ranging-V1-ndk",
+ "android.hardware.bluetooth.ranging-V2-ndk",
"libbluetooth-types",
],
test_config: "VtsHalBluetoothRangingTargetTest.xml",
diff --git a/bluetooth/ranging/aidl/vts/VtsHalBluetoothRangingTargetTest.cpp b/bluetooth/ranging/aidl/vts/VtsHalBluetoothRangingTargetTest.cpp
index 702df95..4510f24 100644
--- a/bluetooth/ranging/aidl/vts/VtsHalBluetoothRangingTargetTest.cpp
+++ b/bluetooth/ranging/aidl/vts/VtsHalBluetoothRangingTargetTest.cpp
@@ -30,12 +30,15 @@
using aidl::android::hardware::bluetooth::ranging::
BnBluetoothChannelSoundingSessionCallback;
using aidl::android::hardware::bluetooth::ranging::ChannelSoudingRawData;
+using aidl::android::hardware::bluetooth::ranging::ChannelSoundingProcedureData;
+using aidl::android::hardware::bluetooth::ranging::Config;
using aidl::android::hardware::bluetooth::ranging::CsSecurityLevel;
using aidl::android::hardware::bluetooth::ranging::IBluetoothChannelSounding;
using aidl::android::hardware::bluetooth::ranging::
IBluetoothChannelSoundingSession;
using aidl::android::hardware::bluetooth::ranging::
IBluetoothChannelSoundingSessionCallback;
+using aidl::android::hardware::bluetooth::ranging::ProcedureEnableConfig;
using aidl::android::hardware::bluetooth::ranging::RangingResult;
using aidl::android::hardware::bluetooth::ranging::Reason;
using aidl::android::hardware::bluetooth::ranging::ResultType;
@@ -43,6 +46,12 @@
using aidl::android::hardware::bluetooth::ranging::VendorSpecificData;
using ndk::ScopedAStatus;
+enum class RangingHalVersion : uint8_t {
+ V_UNAVAILABLE = 0,
+ V_1,
+ V_2,
+};
+
class BluetoothChannelSoundingSessionCallback
: public BnBluetoothChannelSoundingSessionCallback {
public:
@@ -80,6 +89,8 @@
ALOGI("SetUp Ranging Test");
bluetooth_channel_sounding_ = IBluetoothChannelSounding::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
+ hal_version_ = GetRangingHalVersion();
+ ASSERT_GT(hal_version_, RangingHalVersion::V_UNAVAILABLE);
ASSERT_NE(bluetooth_channel_sounding_, nullptr);
}
@@ -95,6 +106,8 @@
ScopedAStatus getSupportedSessionTypes(
std::optional<std::vector<SessionType>>* _aidl_return);
ScopedAStatus getMaxSupportedCsSecurityLevel(CsSecurityLevel* _aidl_return);
+ ScopedAStatus getSupportedCsSecurityLevels(
+ std::vector<CsSecurityLevel>* _aidl_return);
ScopedAStatus openSession(
const BluetoothChannelSoundingParameters& in_params,
const std::shared_ptr<IBluetoothChannelSoundingSessionCallback>&
@@ -111,6 +124,30 @@
return status;
}
+ RangingHalVersion GetRangingHalVersion() {
+ int32_t aidl_version = 0;
+ if (bluetooth_channel_sounding_ == nullptr) {
+ return RangingHalVersion::V_UNAVAILABLE;
+ }
+ auto aidl_ret_val =
+ bluetooth_channel_sounding_->getInterfaceVersion(&aidl_version);
+ if (!aidl_ret_val.isOk()) {
+ return RangingHalVersion::V_UNAVAILABLE;
+ }
+ switch (aidl_version) {
+ case 1:
+ return RangingHalVersion::V_1;
+ case 2:
+ return RangingHalVersion::V_2;
+ default:
+ return RangingHalVersion::V_UNAVAILABLE;
+ }
+ return RangingHalVersion::V_UNAVAILABLE;
+ }
+
+ public:
+ RangingHalVersion hal_version_ = RangingHalVersion::V_UNAVAILABLE;
+
private:
std::shared_ptr<IBluetoothChannelSounding> bluetooth_channel_sounding_;
};
@@ -130,6 +167,13 @@
return bluetooth_channel_sounding_->getMaxSupportedCsSecurityLevel(
_aidl_return);
}
+
+ScopedAStatus BluetoothRangingTest::getSupportedCsSecurityLevels(
+ std::vector<CsSecurityLevel>* _aidl_return) {
+ return bluetooth_channel_sounding_->getSupportedCsSecurityLevels(
+ _aidl_return);
+}
+
ScopedAStatus BluetoothRangingTest::openSession(
const BluetoothChannelSoundingParameters& in_params,
const std::shared_ptr<IBluetoothChannelSoundingSessionCallback>&
@@ -155,11 +199,25 @@
}
TEST_P(BluetoothRangingTest, GetMaxSupportedCsSecurityLevel) {
+ if (hal_version_ > RangingHalVersion::V_1) {
+ GTEST_SKIP();
+ }
CsSecurityLevel security_level;
ScopedAStatus status = getMaxSupportedCsSecurityLevel(&security_level);
ASSERT_TRUE(status.isOk());
}
+TEST_P(BluetoothRangingTest, GetSupportedCsSecurityLevels) {
+ if (hal_version_ < RangingHalVersion::V_2) {
+ GTEST_SKIP();
+ }
+ std::vector<CsSecurityLevel> supported_security_levels;
+ ScopedAStatus status =
+ getSupportedCsSecurityLevels(&supported_security_levels);
+ ASSERT_GT(static_cast<uint8_t>(supported_security_levels.size()), 0);
+ ASSERT_TRUE(status.isOk());
+}
+
TEST_P(BluetoothRangingTest, OpenSession) {
BluetoothChannelSoundingParameters params;
std::shared_ptr<BluetoothChannelSoundingSessionCallback> callback = nullptr;
@@ -205,6 +263,9 @@
}
TEST_P(BluetoothRangingTest, WriteRawData) {
+ if (hal_version_ > RangingHalVersion::V_1) {
+ GTEST_SKIP();
+ }
std::shared_ptr<IBluetoothChannelSoundingSession> session;
auto status = initBluetoothChannelSoundingSession(&session);
ASSERT_TRUE(status.isOk());
@@ -215,6 +276,62 @@
}
}
+TEST_P(BluetoothRangingTest, WriteProcedureData) {
+ if (hal_version_ < RangingHalVersion::V_2) {
+ GTEST_SKIP();
+ }
+ std::shared_ptr<IBluetoothChannelSoundingSession> session;
+ auto status = initBluetoothChannelSoundingSession(&session);
+ ASSERT_TRUE(status.isOk());
+ if (session != nullptr) {
+ ChannelSoundingProcedureData procedure_data;
+ status = session->writeProcedureData(procedure_data);
+ ASSERT_TRUE(status.isOk());
+ }
+}
+
+TEST_P(BluetoothRangingTest, UpdateChannelSoundingConfig) {
+ if (hal_version_ < RangingHalVersion::V_2) {
+ GTEST_SKIP();
+ }
+ std::shared_ptr<IBluetoothChannelSoundingSession> session;
+ auto status = initBluetoothChannelSoundingSession(&session);
+ ASSERT_TRUE(status.isOk());
+ if (session != nullptr) {
+ Config config;
+ status = session->updateChannelSoundingConfig(config);
+ ASSERT_TRUE(status.isOk());
+ }
+}
+
+TEST_P(BluetoothRangingTest, UpdateProcedureEnableConfig) {
+ if (hal_version_ < RangingHalVersion::V_2) {
+ GTEST_SKIP();
+ }
+ std::shared_ptr<IBluetoothChannelSoundingSession> session;
+ auto status = initBluetoothChannelSoundingSession(&session);
+ ASSERT_TRUE(status.isOk());
+ if (session != nullptr) {
+ ProcedureEnableConfig procedure_enable_config;
+ status = session->updateProcedureEnableConfig(procedure_enable_config);
+ ASSERT_TRUE(status.isOk());
+ }
+}
+
+TEST_P(BluetoothRangingTest, UpdateBleConnInterval) {
+ if (hal_version_ < RangingHalVersion::V_2) {
+ GTEST_SKIP();
+ }
+ std::shared_ptr<IBluetoothChannelSoundingSession> session;
+ auto status = initBluetoothChannelSoundingSession(&session);
+ ASSERT_TRUE(status.isOk());
+ if (session != nullptr) {
+ int ble_conn_interval = 10;
+ status = session->updateBleConnInterval(ble_conn_interval);
+ ASSERT_TRUE(status.isOk());
+ }
+}
+
TEST_P(BluetoothRangingTest, CloseSession) {
std::shared_ptr<IBluetoothChannelSoundingSession> session;
auto status = initBluetoothChannelSoundingSession(&session);
diff --git a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
index 51afa12..3aa5d76 100644
--- a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
+++ b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
@@ -83,6 +83,16 @@
// additional overhead, for the digest algorithmIdentifier required by PKCS#1.
const size_t kPkcs1UndigestedSignaturePaddingOverhead = 11;
+// Determine whether the key description is for an asymmetric key.
+bool is_asymmetric(const AuthorizationSet& key_desc) {
+ auto algorithm = key_desc.GetTagValue(TAG_ALGORITHM);
+ if (algorithm && (algorithm.value() == Algorithm::RSA || algorithm.value() == Algorithm::EC)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
size_t count_tag_invalid_entries(const std::vector<KeyParameter>& authorizations) {
return std::count_if(authorizations.begin(), authorizations.end(),
[](const KeyParameter& e) -> bool { return e.tag == Tag::INVALID; });
@@ -418,11 +428,14 @@
vector<Certificate> attest_cert_chain;
// If an attestation is requested, but the system is RKP-only, we need to supply an explicit
// attestation key. Else the result is a key without an attestation.
- // If the RKP-only value is undeterminable (i.e., when running on GSI), generate and use the
- // attest key anyways. In the case that using an attest key is not supported
- // (shouldSkipAttestKeyTest), assume the device has factory keys (so not RKP-only).
+ // - If the RKP-only value is undeterminable (i.e., when running on GSI), generate and use the
+ // `ATTEST_KEY` anyways.
+ // - In the case that using an `ATTEST_KEY` is not supported
+ // (shouldSkipAttestKeyTest), assume the device has factory keys (so not RKP-only).
+ // - If the key being generated is a symmetric key (from test cases that check that the
+ // attestation parameters are correctly ignored), don't try to use an `ATTEST_KEY`.
if (isRkpOnly().value_or(true) && key_desc.Contains(TAG_ATTESTATION_CHALLENGE) &&
- !shouldSkipAttestKeyTest()) {
+ !shouldSkipAttestKeyTest() && is_asymmetric(key_desc)) {
AuthorizationSet attest_key_desc =
AuthorizationSetBuilder().EcdsaKey(EcCurve::P_256).AttestKey().SetDefaultValidity();
attest_key.emplace();
@@ -462,10 +475,7 @@
*key_characteristics = std::move(creationResult.keyCharacteristics);
*cert_chain = std::move(creationResult.certificateChain);
- auto algorithm = key_desc.GetTagValue(TAG_ALGORITHM);
- EXPECT_TRUE(algorithm);
- if (algorithm &&
- (algorithm.value() == Algorithm::RSA || algorithm.value() == Algorithm::EC)) {
+ if (is_asymmetric(key_desc)) {
EXPECT_GE(cert_chain->size(), 1);
if (key_desc.Contains(TAG_ATTESTATION_CHALLENGE)) {
if (attest_key) {
@@ -506,10 +516,7 @@
*key_characteristics = std::move(creationResult.keyCharacteristics);
cert_chain_ = std::move(creationResult.certificateChain);
- auto algorithm = key_desc.GetTagValue(TAG_ALGORITHM);
- EXPECT_TRUE(algorithm);
- if (algorithm &&
- (algorithm.value() == Algorithm::RSA || algorithm.value() == Algorithm::EC)) {
+ if (is_asymmetric(key_desc)) {
EXPECT_GE(cert_chain_.size(), 1);
if (key_desc.Contains(TAG_ATTESTATION_CHALLENGE)) EXPECT_GT(cert_chain_.size(), 1);
} else {
@@ -554,10 +561,7 @@
for (auto& entry : key_characteristics_) {
allAuths.push_back(AuthorizationSet(entry.authorizations));
}
- auto algorithm = allAuths.GetTagValue(TAG_ALGORITHM);
- EXPECT_TRUE(algorithm);
- if (algorithm &&
- (algorithm.value() == Algorithm::RSA || algorithm.value() == Algorithm::EC)) {
+ if (is_asymmetric(allAuths)) {
EXPECT_GE(cert_chain_.size(), 1);
} else {
// For symmetric keys there should be no certificates.