• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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