Merge "hwcryptohal: Adding ParcelFileDescriptor support" into main am: e205612327
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/3514217
Change-Id: I8c96229dcc84c13d281f122e203122732ea05b55
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/security/see/hwcrypto/default/hwcryptolib.cpp b/security/see/hwcrypto/default/hwcryptolib.cpp
index 5babc23..a7ecca1 100644
--- a/security/see/hwcrypto/default/hwcryptolib.cpp
+++ b/security/see/hwcrypto/default/hwcryptolib.cpp
@@ -216,6 +216,36 @@
return gcmModeParameters;
}
+std::optional<cpp_hwcrypto::MemoryBufferParameter> convertMemoryBufferParameters(
+ const ndk_hwcrypto::MemoryBufferParameter& ndkMemBuffParams) {
+ cpp_hwcrypto::MemoryBufferParameter memBuffParams = cpp_hwcrypto::MemoryBufferParameter();
+ memBuffParams.sizeBytes = ndkMemBuffParams.sizeBytes;
+ android::os::ParcelFileDescriptor pfd;
+ ndk::ScopedFileDescriptor ndkFd;
+ switch (ndkMemBuffParams.bufferHandle.getTag()) {
+ case ndk_hwcrypto::MemoryBufferParameter::MemoryBuffer::input:
+ ndkFd = ndkMemBuffParams.bufferHandle
+ .get<ndk_hwcrypto::MemoryBufferParameter::MemoryBuffer::input>()
+ .dup();
+ pfd.reset(binder::unique_fd(ndkFd.release()));
+ memBuffParams.bufferHandle
+ .set<cpp_hwcrypto::MemoryBufferParameter::MemoryBuffer::input>(std::move(pfd));
+ break;
+ case ndk_hwcrypto::MemoryBufferParameter::MemoryBuffer::output:
+ ndkFd = ndkMemBuffParams.bufferHandle
+ .get<ndk_hwcrypto::MemoryBufferParameter::MemoryBuffer::output>()
+ .dup();
+ pfd.reset(binder::unique_fd(ndkFd.release()));
+ memBuffParams.bufferHandle
+ .set<cpp_hwcrypto::MemoryBufferParameter::MemoryBuffer::output>(std::move(pfd));
+ break;
+ default:
+ LOG(ERROR) << "unknown bufferHandle type";
+ return std::nullopt;
+ }
+ return memBuffParams;
+}
+
std::optional<cpp_hwcrypto::OperationParameters> convertOperationParameters(
const ndk_hwcrypto::OperationParameters& ndkOperationParameters) {
cpp_hwcrypto::OperationParameters operationParameters = cpp_hwcrypto::OperationParameters();
@@ -427,10 +457,17 @@
std::optional<cpp_hwcrypto::types::OperationData> cppOperationData;
std::optional<cpp_hwcrypto::PatternParameters> cppPatternParameters;
std::optional<cpp_hwcrypto::OperationParameters> cppOperationParameters;
+ std::optional<cpp_hwcrypto::MemoryBufferParameter> cppMemBuffParams;
switch (operation.getTag()) {
case ndk_hwcrypto::CryptoOperation::setMemoryBuffer:
- // TODO: finish this case
- exit(1);
+ cppMemBuffParams = convertMemoryBufferParameters(
+ operation.get<ndk_hwcrypto::CryptoOperation::setMemoryBuffer>());
+ if (cppMemBuffParams.has_value()) {
+ cppOperation.set<cpp_hwcrypto::CryptoOperation::setMemoryBuffer>(
+ std::move(cppMemBuffParams.value()));
+ } else {
+ return convertStatus(status);
+ }
break;
case ndk_hwcrypto::CryptoOperation::setOperationParameters:
cppOperationParameters = convertOperationParameters(
@@ -681,7 +718,11 @@
Result<void> HwCryptoKey::connectToTrusty(const char* tipcDev) {
assert(!mSession);
- mSession = RpcTrustyConnectWithSessionInitializer(tipcDev, HWCRYPTO_KEY_PORT, [](auto) {});
+ auto session_initializer = [](sp<RpcSession>& session) {
+ session->setFileDescriptorTransportMode(RpcSession::FileDescriptorTransportMode::TRUSTY);
+ };
+ mSession =
+ RpcTrustyConnectWithSessionInitializer(tipcDev, HWCRYPTO_KEY_PORT, session_initializer);
if (!mSession) {
return ErrnoError() << "failed to connect to hwcrypto";
}