Implement GetKeyCharacteristics.
Still need to add serialization to the messages.
Change-Id: I572c48474bf4d4f553d53cad475b57fa8937a02a
diff --git a/google_keymaster_test.cpp b/google_keymaster_test.cpp
index 454e6b8..4139af6 100644
--- a/google_keymaster_test.cpp
+++ b/google_keymaster_test.cpp
@@ -15,12 +15,14 @@
*/
#include <gtest/gtest.h>
+
#include <openssl/engine.h>
#define KEYMASTER_NAME_TAGS
-#include "keymaster_tags.h"
+#include "google_keymaster_test_utils.h"
#include "google_keymaster_utils.h"
#include "google_softkeymaster.h"
+#include "keymaster_tags.h"
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
@@ -181,10 +183,11 @@
Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN),
Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY),
Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA),
+ Authorization(TAG_KEY_SIZE, 256),
Authorization(TAG_USER_ID, 7),
Authorization(TAG_USER_AUTH_ID, 8),
- Authorization(TAG_APPLICATION_ID, reinterpret_cast<const uint8_t*>("app_id"), 6),
- Authorization(TAG_APPLICATION_DATA, reinterpret_cast<const uint8_t*>("app_data"), 8),
+ Authorization(TAG_APPLICATION_ID, "app_id", 6),
+ Authorization(TAG_APPLICATION_DATA, "app_data", 8),
Authorization(TAG_AUTH_TIMEOUT, 300),
};
GenerateKeyRequest req;
@@ -206,7 +209,7 @@
EXPECT_TRUE(contains(rsp.unenforced, TAG_USER_ID, 7));
EXPECT_TRUE(contains(rsp.unenforced, TAG_USER_AUTH_ID, 8));
- EXPECT_TRUE(contains(rsp.unenforced, TAG_KEY_SIZE, 2048));
+ EXPECT_TRUE(contains(rsp.unenforced, TAG_KEY_SIZE, 256));
EXPECT_TRUE(contains(rsp.unenforced, TAG_AUTH_TIMEOUT, 300));
// Verify that App ID, App data and ROT are NOT included.
@@ -226,5 +229,39 @@
EXPECT_TRUE(contains(rsp.unenforced, KM_TAG_CREATION_DATETIME));
}
+typedef KeymasterTest GetKeyCharacteristics;
+TEST_F(GetKeyCharacteristics, SimpleRsa) {
+ keymaster_key_param_t params[] = {
+ Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN),
+ Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY),
+ Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA),
+ Authorization(TAG_KEY_SIZE, 256),
+ Authorization(TAG_USER_ID, 7),
+ Authorization(TAG_USER_AUTH_ID, 8),
+ Authorization(TAG_APPLICATION_ID, reinterpret_cast<const uint8_t*>("app_id"), 6),
+ Authorization(TAG_AUTH_TIMEOUT, 300),
+ };
+
+ GenerateKeyRequest gen_req;
+ gen_req.key_description.Reinitialize(params, array_length(params));
+ GenerateKeyResponse gen_rsp;
+
+ device.GenerateKey(gen_req, &gen_rsp);
+
+ GetKeyCharacteristicsRequest req;
+ req.key_blob = gen_rsp.key_blob;
+ req.client_id.data = reinterpret_cast<const uint8_t*>("app_id");
+ req.client_id.data_length = 6;
+ req.app_data.data = NULL;
+ req.app_data.data_length = 0;
+
+ GetKeyCharacteristicsResponse rsp;
+ device.GetKeyCharacteristics(req, &rsp);
+ ASSERT_EQ(KM_ERROR_OK, rsp.error);
+
+ EXPECT_EQ(gen_rsp.enforced, rsp.enforced);
+ EXPECT_EQ(gen_rsp.unenforced, rsp.unenforced);
+}
+
} // namespace test
} // namespace keymaster