42 files changed, 6493 insertions, 19016 deletions
diff --git a/unit_test/keymaster_tags.cpp b/unit_test/keymaster_tags.cpp deleted file mode 100644 index 238bc33..0000000 --- a/unit_test/keymaster_tags.cpp +++ b/dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <keymaster/keymaster_tags.h> - -namespace keymaster { - -#ifdef KEYMASTER_NAME_TAGS -const char* StringifyTag(keymaster_tag_t tag) { - switch (tag) { - case KM_TAG_INVALID: - return "KM_TAG_INVALID"; - case KM_TAG_PURPOSE: - return "KM_TAG_PURPOSE"; - case KM_TAG_ALGORITHM: - return "KM_TAG_ALGORITHM"; - case KM_TAG_KEY_SIZE: - return "KM_TAG_KEY_SIZE"; - case KM_TAG_BLOCK_MODE: - return "KM_TAG_BLOCK_MODE"; - case KM_TAG_DIGEST: - return "KM_TAG_DIGEST"; - case KM_TAG_PADDING: - return "KM_TAG_PADDING"; - case KM_TAG_CALLER_NONCE: - return "KM_TAG_CALLER_NONCE"; - case KM_TAG_MIN_MAC_LENGTH: - return "KM_TAG_MIN_MAC_LENGTH"; - case KM_TAG_RSA_PUBLIC_EXPONENT: - return "KM_TAG_RSA_PUBLIC_EXPONENT"; - case KM_TAG_BLOB_USAGE_REQUIREMENTS: - return "KM_TAG_BLOB_USAGE_REQUIREMENTS"; - case KM_TAG_BOOTLOADER_ONLY: - return "KM_TAG_BOOTLOADER_ONLY"; - case KM_TAG_ACTIVE_DATETIME: - return "KM_TAG_ACTIVE_DATETIME"; - case KM_TAG_ORIGINATION_EXPIRE_DATETIME: - return "KM_TAG_ORIGINATION_EXPIRE_DATETIME"; - case KM_TAG_USAGE_EXPIRE_DATETIME: - return "KM_TAG_USAGE_EXPIRE_DATETIME"; - case KM_TAG_MIN_SECONDS_BETWEEN_OPS: - return "KM_TAG_MIN_SECONDS_BETWEEN_OPS"; - case KM_TAG_MAX_USES_PER_BOOT: - return "KM_TAG_MAX_USES_PER_BOOT"; - case KM_TAG_ALL_USERS: - return "KM_TAG_ALL_USERS"; - case KM_TAG_USER_ID: - return "KM_TAG_USER_ID"; - case KM_TAG_USER_SECURE_ID: - return "KM_TAG_USER_SECURE_ID"; - case KM_TAG_NO_AUTH_REQUIRED: - return "KM_TAG_NO_AUTH_REQUIRED"; - case KM_TAG_USER_AUTH_TYPE: - return "KM_TAG_USER_AUTH_TYPE"; - case KM_TAG_AUTH_TIMEOUT: - return "KM_TAG_AUTH_TIMEOUT"; - case KM_TAG_ALL_APPLICATIONS: - return "KM_TAG_ALL_APPLICATIONS"; - case KM_TAG_APPLICATION_ID: - return "KM_TAG_APPLICATION_ID"; - case KM_TAG_APPLICATION_DATA: - return "KM_TAG_APPLICATION_DATA"; - case KM_TAG_CREATION_DATETIME: - return "KM_TAG_CREATION_DATETIME"; - case KM_TAG_ORIGIN: - return "KM_TAG_ORIGIN"; - case KM_TAG_ROLLBACK_RESISTANT: - return "KM_TAG_ROLLBACK_RESISTANT"; - case KM_TAG_ROOT_OF_TRUST: - return "KM_TAG_ROOT_OF_TRUST"; - case KM_TAG_ASSOCIATED_DATA: - return "KM_TAG_ASSOCIATED_DATA"; - case KM_TAG_NONCE: - return "KM_TAG_NONCE"; - case KM_TAG_AUTH_TOKEN: - return "KM_TAG_AUTH_TOKEN"; - case KM_TAG_MAC_LENGTH: - return "KM_TAG_MAC_LENGTH"; - case KM_TAG_KDF: - return "KM_TAG_KDF"; - case KM_TAG_EC_CURVE: - return "KM_TAG_EC_CURVE"; - case KM_TAG_ECIES_SINGLE_HASH_MODE: - return "KM_TAG_ECIES_SINGLE_HASH_MODE"; - case KM_TAG_OS_VERSION: - return "KM_TAG_OS_VERSION"; - case KM_TAG_OS_PATCHLEVEL: - return "KM_TAG_OS_PATCHLEVEL"; - case KM_TAG_EXPORTABLE: - return "KM_TAG_EXPORTABLE"; - case KM_TAG_UNIQUE_ID: - return "KM_TAG_UNIQUE_ID"; - case KM_TAG_INCLUDE_UNIQUE_ID: - return "KM_TAG_INCLUDE_UNIQUE_ID"; - case KM_TAG_RESET_SINCE_ID_ROTATION: - return "KM_TAG_RESET_SINCE_ID_ROTATION"; - case KM_TAG_ALLOW_WHILE_ON_BODY: - return "KM_TAG_ALLOW_WHILE_ON_BODY"; - case KM_TAG_ATTESTATION_CHALLENGE: - return "KM_TAG_ATTESTATION_CHALLENGE"; - } - return "<Unknown>"; -} -#endif // KEYMASTER_NAME_TAGS - -// DEFINE_KEYMASTER_TAG is used to create TypedTag instances for each non-enum keymaster tag. -#define DEFINE_KEYMASTER_TAG(type, name) TypedTag<type, KM_##name> name - -DEFINE_KEYMASTER_TAG(KM_INVALID, TAG_INVALID); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_KEY_SIZE); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_MAC_LENGTH); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_CALLER_NONCE); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_MIN_MAC_LENGTH); -DEFINE_KEYMASTER_TAG(KM_ULONG, TAG_RSA_PUBLIC_EXPONENT); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_ECIES_SINGLE_HASH_MODE); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_INCLUDE_UNIQUE_ID); -DEFINE_KEYMASTER_TAG(KM_DATE, TAG_ACTIVE_DATETIME); -DEFINE_KEYMASTER_TAG(KM_DATE, TAG_ORIGINATION_EXPIRE_DATETIME); -DEFINE_KEYMASTER_TAG(KM_DATE, TAG_USAGE_EXPIRE_DATETIME); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_MIN_SECONDS_BETWEEN_OPS); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_MAX_USES_PER_BOOT); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_ALL_USERS); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_USER_ID); -DEFINE_KEYMASTER_TAG(KM_ULONG_REP, TAG_USER_SECURE_ID); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_NO_AUTH_REQUIRED); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_AUTH_TIMEOUT); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_ALLOW_WHILE_ON_BODY); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_ALL_APPLICATIONS); -DEFINE_KEYMASTER_TAG(KM_BYTES, TAG_APPLICATION_ID); -DEFINE_KEYMASTER_TAG(KM_BYTES, TAG_APPLICATION_DATA); -DEFINE_KEYMASTER_TAG(KM_DATE, TAG_CREATION_DATETIME); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_ROLLBACK_RESISTANT); -DEFINE_KEYMASTER_TAG(KM_BYTES, TAG_ROOT_OF_TRUST); -DEFINE_KEYMASTER_TAG(KM_BYTES, TAG_ASSOCIATED_DATA); -DEFINE_KEYMASTER_TAG(KM_BYTES, TAG_NONCE); -DEFINE_KEYMASTER_TAG(KM_BYTES, TAG_AUTH_TOKEN); -DEFINE_KEYMASTER_TAG(KM_BOOL, TAG_BOOTLOADER_ONLY); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_OS_VERSION); -DEFINE_KEYMASTER_TAG(KM_UINT, TAG_OS_PATCHLEVEL); -DEFINE_KEYMASTER_TAG(KM_BYTES, TAG_UNIQUE_ID); - -// DEFINE_KEYMASTER_ENUM_TAG is used to create TypedEnumTag instances for each enum keymaster tag. - -#define DEFINE_KEYMASTER_ENUM_TAG(type, name, enumtype) TypedEnumTag<type, KM_##name, enumtype> name - -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM_REP, TAG_PURPOSE, keymaster_purpose_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM, TAG_ALGORITHM, keymaster_algorithm_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM_REP, TAG_BLOCK_MODE, keymaster_block_mode_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM_REP, TAG_DIGEST, keymaster_digest_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM, TAG_DIGEST_OLD, keymaster_digest_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM_REP, TAG_PADDING, keymaster_padding_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM, TAG_PADDING_OLD, keymaster_padding_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM, TAG_BLOB_USAGE_REQUIREMENTS, - keymaster_key_blob_usage_requirements_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM, TAG_ORIGIN, keymaster_key_origin_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM, TAG_USER_AUTH_TYPE, hw_authenticator_type_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM_REP, TAG_KDF, keymaster_kdf_t); -DEFINE_KEYMASTER_ENUM_TAG(KM_ENUM, TAG_EC_CURVE, keymaster_ec_curve_t); - -} // namespace keymaster |