1 /* 2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <gtest/gtest.h> 17 18 #include <cstring> 19 20 #include "adaptor_time.h" 21 #include "token_key.h" 22 #include "user_sign_centre.h" 23 24 extern "C" { 25 extern LinkedList *g_userInfoList; 26 extern bool IsTimeValid(const UserAuthTokenHal *userAuthToken); 27 extern ResultCode UserAuthTokenSign(UserAuthTokenHal *userAuthToken, HksAuthTokenKey *authTokenKey); 28 extern ResultCode GetTokenDataCipherResult(const TokenDataToEncrypt *data, UserAuthTokenHal *authToken, 29 const HksAuthTokenKey *tokenKey); 30 extern ResultCode DecryptTokenCipher(const UserAuthTokenHal *userAuthToken, UserAuthTokenPlain *tokenPlain, 31 HksAuthTokenKey *tokenKey); 32 extern ResultCode CheckUserAuthTokenHmac(const UserAuthTokenHal *userAuthToken, HksAuthTokenKey *tokenKey); 33 } 34 35 namespace OHOS { 36 namespace UserIam { 37 namespace UserAuth { 38 using namespace testing; 39 using namespace testing::ext; 40 41 #define DEAULT_CHALLENGE {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, \ 42 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1} 43 #define DEFAULT_CIPHER {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, \ 44 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7} 45 #define DEFAULT_TAG {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5} 46 #define DEFAULT_IV {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1} 47 #define DEFAULT_SIGN {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, \ 48 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1} 49 50 class UserAuthSignTest : public testing::Test { 51 public: SetUpTestCase()52 static void SetUpTestCase() {}; 53 TearDownTestCase()54 static void TearDownTestCase() {}; 55 SetUp()56 void SetUp() {}; 57 TearDown()58 void TearDown() {}; 59 }; 60 61 HWTEST_F(UserAuthSignTest, TestIsTimeValid, TestSize.Level0) 62 { 63 UserAuthTokenHal token = {}; 64 token.tokenDataPlain.time = UINT64_MAX; 65 EXPECT_FALSE(IsTimeValid(&token)); 66 token.tokenDataPlain.time = 0; 67 IsTimeValid(&token); 68 token.tokenDataPlain.time = GetSystemTime(); 69 EXPECT_TRUE(IsTimeValid(&token)); 70 } 71 72 HWTEST_F(UserAuthSignTest, TestUserAuthTokenSign, TestSize.Level0) 73 { 74 UserAuthTokenHal token = {}; 75 HksAuthTokenKey userAuthTokenKey = {}; 76 EXPECT_EQ(UserAuthTokenSign(&token, &userAuthTokenKey), RESULT_SUCCESS); 77 } 78 79 HWTEST_F(UserAuthSignTest, TestTokenGenerateAndVerify, TestSize.Level0) 80 { 81 const uint32_t testVersion = 1; 82 const uint32_t testAuthTrustLevel = 3; 83 const uint32_t testAuthType = 4; 84 const uint32_t testAuthMode = 5; 85 const uint32_t testSecurityLevel = 6; 86 const int32_t testUserId = 7; 87 const uint64_t testSecureUid = 8; 88 const uint64_t testEnrolledId = 9; 89 const uint64_t testCredentialId = 10; 90 UserAuthTokenHal token = { 91 .version = testVersion, 92 .tokenDataPlain = { 93 .challenge = DEAULT_CHALLENGE, 94 .time = GetSystemTime(), 95 .authTrustLevel = testAuthTrustLevel, 96 .authType = testAuthType, 97 .authMode = testAuthMode, 98 .securityLevel = testSecurityLevel, 99 }, 100 .tokenDataCipher = DEFAULT_CIPHER, 101 .tag = DEFAULT_TAG, 102 .iv = DEFAULT_IV, 103 .sign = DEFAULT_SIGN, 104 }; 105 TokenDataToEncrypt data = { 106 .userId = testUserId, 107 .secureUid = testSecureUid, 108 .enrolledId = testEnrolledId, 109 .credentialId = testCredentialId, 110 }; 111 HksAuthTokenKey userAuthTokenKey = {}; 112 EXPECT_EQ(GetTokenKey(&userAuthTokenKey), RESULT_SUCCESS); 113 EXPECT_EQ(GetTokenDataCipherResult(&data, &token, &userAuthTokenKey), RESULT_SUCCESS); 114 EXPECT_EQ(UserAuthTokenSign(&token, &userAuthTokenKey), RESULT_SUCCESS); 115 UserAuthTokenPlain userAuthTokenPlain = {}; 116 EXPECT_EQ(UserAuthTokenVerify(&token, &userAuthTokenPlain), RESULT_SUCCESS); 117 EXPECT_EQ(memcmp(&(userAuthTokenPlain.tokenDataPlain), &(token.tokenDataPlain), 118 sizeof(userAuthTokenPlain.tokenDataPlain)), 0); 119 EXPECT_EQ(memcmp(&(userAuthTokenPlain.tokenDataToEncrypt), &data, 120 sizeof(userAuthTokenPlain.tokenDataToEncrypt)), 0); 121 } 122 123 HWTEST_F(UserAuthSignTest, TestDecryptTokenCipher, TestSize.Level0) 124 { 125 UserAuthTokenHal userAuthToken = {}; 126 UserAuthTokenPlain userAuthTokenPlain = {}; 127 HksAuthTokenKey userAuthTokenKey = {}; 128 EXPECT_EQ(DecryptTokenCipher(&userAuthToken, &userAuthTokenPlain, &userAuthTokenKey), RESULT_GENERAL_ERROR); 129 } 130 131 HWTEST_F(UserAuthSignTest, TestCheckUserAuthTokenHmac, TestSize.Level0) 132 { 133 UserAuthTokenHal userAuthToken = {}; 134 HksAuthTokenKey tokenKey = {}; 135 EXPECT_EQ(CheckUserAuthTokenHmac(&userAuthToken, &tokenKey), RESULT_BAD_SIGN); 136 } 137 138 HWTEST_F(UserAuthSignTest, TestUserAuthTokenVerify, TestSize.Level0) 139 { 140 UserAuthTokenHal userAuthToken = {}; 141 UserAuthTokenPlain userAuthTokenPlain = {}; 142 HksAuthTokenKey userAuthTokenKey = {}; 143 EXPECT_EQ(GetTokenKey(&userAuthTokenKey), RESULT_SUCCESS); 144 EXPECT_EQ(UserAuthTokenVerify(nullptr, &userAuthTokenPlain), RESULT_BAD_PARAM); 145 EXPECT_EQ(UserAuthTokenVerify(&userAuthToken, nullptr), RESULT_BAD_PARAM); 146 userAuthToken.tokenDataPlain.time = UINT64_MAX; 147 EXPECT_EQ(UserAuthTokenVerify(&userAuthToken, &userAuthTokenPlain), RESULT_TOKEN_TIMEOUT); 148 userAuthToken.tokenDataPlain.time = GetSystemTime(); 149 EXPECT_EQ(UserAuthTokenVerify(&userAuthToken, &userAuthTokenPlain), RESULT_BAD_SIGN); 150 EXPECT_EQ(UserAuthTokenSign(&userAuthToken, &userAuthTokenKey), RESULT_SUCCESS); 151 EXPECT_EQ(UserAuthTokenVerify(&userAuthToken, &userAuthTokenPlain), RESULT_GENERAL_ERROR); 152 } 153 } // namespace UserAuth 154 } // namespace UserIam 155 } // namespace OHOS 156