keymaster: use hmac_key as AuthToken key

Current AuthToken key use random number key. In order to
synchronize with GSC AuthToken key which use hmac_key, copy
hamc_key to AuthToken key in InitializeAuthTokenKey().

Bug: 175096345
Change-Id: I1d15355ac6195e5f68dffd295c774abc25206f79
diff --git a/openssl_keymaster_enforcement.cpp b/openssl_keymaster_enforcement.cpp
index 32f3093..8d56809 100644
--- a/openssl_keymaster_enforcement.cpp
+++ b/openssl_keymaster_enforcement.cpp
@@ -250,4 +250,21 @@
 
     return KM_ERROR_OK;
 }
+
+keymaster_error_t OpenSSLKeymasterEnforcement::GetHmacKey(
+            keymaster_key_blob_t* key) {
+    if ((key == nullptr) || (key->key_material == nullptr)) {
+        return KM_ERROR_UNEXPECTED_NULL_POINTER;
+    }
+
+    if (hmac_key_.key_material_size != SHA256_DIGEST_LENGTH) {
+        return KM_ERROR_INVALID_ARGUMENT;
+    }
+
+    memcpy((void*)key->key_material, hmac_key_.key_material,
+           hmac_key_.key_material_size);
+    key->key_material_size = hmac_key_.key_material_size;
+
+    return KM_ERROR_OK;
+}
 }  // namespace keymaster
diff --git a/openssl_keymaster_enforcement.h b/openssl_keymaster_enforcement.h
index 5a41139..cbc8263 100644
--- a/openssl_keymaster_enforcement.h
+++ b/openssl_keymaster_enforcement.h
@@ -50,6 +50,7 @@
             KeymasterBlob* sharingCheck) override;
     VerifyAuthorizationResponse VerifyAuthorization(
             const VerifyAuthorizationRequest& request) override;
+    keymaster_error_t GetHmacKey(keymaster_key_blob_t* key);
 
 private:
     static const size_t kKeyAgreementKeySize = TRUSTY_KM_KAK_SIZE;
diff --git a/trusty_keymaster_context.cpp b/trusty_keymaster_context.cpp
index e3d930e..aa0e37d 100644
--- a/trusty_keymaster_context.cpp
+++ b/trusty_keymaster_context.cpp
@@ -509,9 +509,18 @@
 }
 
 bool TrustyKeymasterContext::InitializeAuthTokenKey() {
-    if (GenerateRandom(auth_token_key_, kAuthTokenKeySize) != KM_ERROR_OK)
-        return false;
-    auth_token_key_initialized_ = true;
+    if (auth_token_key_initialized_)
+        return true;
+
+    keymaster_key_blob_t key;
+    key.key_material = auth_token_key_;
+    key.key_material_size = kAuthTokenKeySize;
+    keymaster_error_t error = enforcement_policy_.GetHmacKey(&key);
+    if (error == KM_ERROR_OK)
+        auth_token_key_initialized_ = true;
+    else
+        auth_token_key_initialized_ = false;
+
     return auth_token_key_initialized_;
 }