Token Manager: use arbitrarily sized tokens.

Token manager tokens need to be larger then 64 bits so that we have
sufficient security. Allowing them to be variably sized gives us
sufficient flexibility to change the underlying implementation without
having to change the interface.

Test: hidl_test
Test: (sanity) YouTube videos work
Test: (sanity) watching movies works
Test: Camera record + replay works
Bug: 33842662
Change-Id: I1acc8b5ab5a06597366adbe5718b63acf88c635a
diff --git a/transport/token/1.0/utils/HybridInterface.cpp b/transport/token/1.0/utils/HybridInterface.cpp
index f28446e..106ad4e 100644
--- a/transport/token/1.0/utils/HybridInterface.cpp
+++ b/transport/token/1.0/utils/HybridInterface.cpp
@@ -89,19 +89,17 @@
 }
 
 bool createHalToken(const sp<HInterface>& interface, HalToken* token) {
-    hardware::Return<HalToken> transaction(false);
+    hardware::Return<void> transaction;
     {
         std::lock_guard<std::mutex> lock(gTokenManagerLock);
         if (isBadTokenManager()) {
             return false;
         }
-        transaction = gTokenManager->createToken(interface);
-        if (isBadTransaction(transaction)) {
-            return false;
-        }
+        transaction = gTokenManager->createToken(interface, [&](const HalToken &newToken) {
+            *token = newToken;
+        });
     }
-    *token = static_cast<HalToken>(transaction);
-    return true;
+    return !isBadTransaction(transaction);
 }
 
 bool deleteHalToken(const HalToken& token) {