• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "huks_agree_dh_test.h"
17 
18 #include <gtest/gtest.h>
19 
20 using namespace testing::ext;
21 namespace Unittest::DhAgree
22 {
23 class HuksAgreeDHTest : public testing::Test
24 {
25    public:
26     static void SetUpTestCase(void);
27 
28     static void TearDownTestCase(void);
29 
30     void SetUp();
31 
32     void TearDown();
33 };
34 
SetUpTestCase(void)35 void HuksAgreeDHTest::SetUpTestCase(void) {}
36 
TearDownTestCase(void)37 void HuksAgreeDHTest::TearDownTestCase(void) {}
38 
SetUp()39 void HuksAgreeDHTest::SetUp() {}
40 
TearDown()41 void HuksAgreeDHTest::TearDown() {}
42 
HksDhAgreeFinish(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_Blob * publicKey,const struct OH_Huks_ParamSet * initParamSet,const struct OH_Huks_ParamSet * finishParamSet,struct OH_Huks_Blob * outData)43 OH_Huks_Result HksDhAgreeFinish(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_Blob *publicKey,
44                                 const struct OH_Huks_ParamSet *initParamSet,
45                                 const struct OH_Huks_ParamSet *finishParamSet, struct OH_Huks_Blob *outData)
46 {
47     struct OH_Huks_Blob inData = {g_inData.length(), (uint8_t *)g_inData.c_str()};
48 
49     uint8_t handleU[sizeof(uint64_t)] = {0};
50     struct OH_Huks_Blob handle = {sizeof(uint64_t), handleU};
51     OH_Huks_Result ret = OH_Huks_InitSession(keyAlias, initParamSet, &handle, nullptr);
52     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Init failed.";
53     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
54         return ret;
55     }
56 
57     uint8_t outDataU[DH_COMMON_SIZE] = {0};
58     struct OH_Huks_Blob outDataUpdate = {DH_COMMON_SIZE, outDataU};
59     ret = OH_Huks_UpdateSession(&handle, initParamSet, publicKey, &outDataUpdate);
60     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Update failed.";
61     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
62         return ret;
63     }
64 
65     ret = OH_Huks_FinishSession(&handle, finishParamSet, &inData, outData);
66     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Finish failed.";
67     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
68         return ret;
69     }
70     return ret;
71 }
72 
HksDhAgreeAbort(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_Blob * publicKey,const struct OH_Huks_ParamSet * initParamSet)73 OH_Huks_Result HksDhAgreeAbort(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_Blob *publicKey,
74                                const struct OH_Huks_ParamSet *initParamSet)
75 {
76     uint8_t handleU[sizeof(uint64_t)] = {0};
77     struct OH_Huks_Blob handle = {sizeof(uint64_t), handleU};
78     OH_Huks_Result ret = OH_Huks_InitSession(keyAlias, initParamSet, &handle, nullptr);
79     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Init failed.";
80     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
81         return ret;
82     }
83 
84     uint8_t outDataU[DH_COMMON_SIZE] = {0};
85     struct OH_Huks_Blob outDataUpdate = {DH_COMMON_SIZE, outDataU};
86     ret = OH_Huks_UpdateSession(&handle, initParamSet, publicKey, &outDataUpdate);
87     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Update failed.";
88     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
89         return ret;
90     }
91 
92     ret = OH_Huks_AbortSession(&handle, initParamSet);
93     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Finish failed.";
94     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
95         return ret;
96     }
97     return ret;
98 }
99 
HksDhAgreeExport(const struct OH_Huks_Blob * keyAlias1,const struct OH_Huks_Blob * keyAlias2,struct OH_Huks_Blob * publicKey1,struct OH_Huks_Blob * publicKey2,const struct OH_Huks_ParamSet * genParamSet)100 OH_Huks_Result HksDhAgreeExport(const struct OH_Huks_Blob *keyAlias1, const struct OH_Huks_Blob *keyAlias2,
101                                 struct OH_Huks_Blob *publicKey1, struct OH_Huks_Blob *publicKey2,
102                                 const struct OH_Huks_ParamSet *genParamSet)
103 {
104     OH_Huks_Result ret = OH_Huks_ExportPublicKeyItem(keyAlias1, genParamSet, publicKey1);
105     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "ExportPublicKey01 failed.";
106     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
107         return ret;
108     }
109     ret = OH_Huks_ExportPublicKeyItem(keyAlias2, genParamSet, publicKey2);
110     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "ExportPublicKey02 failed.";
111     if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
112         return ret;
113     }
114     return ret;
115 }
116 
HksDhAgreeFreeParamSet(struct OH_Huks_ParamSet * paramSet1,struct OH_Huks_ParamSet * paramSet2,struct OH_Huks_ParamSet * paramSet3)117 void HksDhAgreeFreeParamSet(struct OH_Huks_ParamSet *paramSet1, struct OH_Huks_ParamSet *paramSet2,
118                             struct OH_Huks_ParamSet *paramSet3)
119 {
120     OH_Huks_FreeParamSet(&paramSet1);
121     OH_Huks_FreeParamSet(&paramSet2);
122     OH_Huks_FreeParamSet(&paramSet3);
123 }
124 
HksDhAgreeFreeParamSet(struct OH_Huks_ParamSet * paramSet1,struct OH_Huks_ParamSet * paramSet2,struct OH_Huks_ParamSet * paramSet3,struct OH_Huks_ParamSet * paramSet4,struct OH_Huks_ParamSet * paramSet5)125 void HksDhAgreeFreeParamSet(struct OH_Huks_ParamSet *paramSet1, struct OH_Huks_ParamSet *paramSet2,
126                             struct OH_Huks_ParamSet *paramSet3, struct OH_Huks_ParamSet *paramSet4,
127                             struct OH_Huks_ParamSet *paramSet5)
128 {
129     OH_Huks_FreeParamSet(&paramSet1);
130     OH_Huks_FreeParamSet(&paramSet2);
131     OH_Huks_FreeParamSet(&paramSet3);
132     OH_Huks_FreeParamSet(&paramSet4);
133     OH_Huks_FreeParamSet(&paramSet5);
134 }
135 
HksDhAgreeFreeBlob(struct OH_Huks_Blob * blob1,struct OH_Huks_Blob * blob2)136 void HksDhAgreeFreeBlob(struct OH_Huks_Blob *blob1, struct OH_Huks_Blob *blob2)
137 {
138     HksFree(blob1->data);
139     HksFree(blob2->data);
140 }
141 
HksDhAgreeFreeBlob(struct OH_Huks_Blob * blob1,struct OH_Huks_Blob * blob2,struct OH_Huks_Blob * blob3,struct OH_Huks_Blob * blob4)142 void HksDhAgreeFreeBlob(struct OH_Huks_Blob *blob1, struct OH_Huks_Blob *blob2, struct OH_Huks_Blob *blob3,
143                         struct OH_Huks_Blob *blob4)
144 {
145     HksFree(blob1->data);
146     HksFree(blob2->data);
147     HksFree(blob3->data);
148     HksFree(blob4->data);
149 }
150 
151 /**
152  * @tc.name: HuksAgreeDHTest.Security_HUKS_NAPI_Agree_DH_0100
153  * @tc.desc: alg-DH, pur-AGREE
154  * @tc.type: FUNC
155  */
156 HWTEST_F(HuksAgreeDHTest, Security_HUKS_NAPI_Agree_DH_0100, TestSize.Level1)
157 {
158     struct OH_Huks_ParamSet *genParamSet = nullptr;
159     struct OH_Huks_ParamSet *initParamSet01 = nullptr;
160     struct OH_Huks_ParamSet *finishParamSet01 = nullptr;
161     struct OH_Huks_ParamSet *initParamSet02 = nullptr;
162     struct OH_Huks_ParamSet *finishParamSet02 = nullptr;
163     OH_Huks_Result ret = InitParamSet(&genParamSet, g_genParams001, sizeof(g_genParams001) / sizeof(OH_Huks_Param));
164     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "InitParamSet(gen) failed.";
165     ret = InitParamSet(&initParamSet01, g_agreeParams01Init001, sizeof(g_agreeParams01Init001) / sizeof(OH_Huks_Param));
166     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "InitParamSet(init & update)01 failed.";
167     ret = InitParamSet(&finishParamSet01, g_agreeParams01Finish001,
168                        sizeof(g_agreeParams01Finish001) / sizeof(OH_Huks_Param));
169     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "InitParamSet(finish)01 failed.";
170     ret = InitParamSet(&initParamSet02, g_agreeParams02Init001, sizeof(g_agreeParams02Init001) / sizeof(OH_Huks_Param));
171     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "InitParamSet(init & update)02 failed.";
172     ret = InitParamSet(&finishParamSet02, g_agreeParams02Finish001,
173                        sizeof(g_agreeParams02Finish001) / sizeof(OH_Huks_Param));
174     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "InitParamSet(finish)02 failed.";
175 
176     OH_Huks_Result ret1 = OH_Huks_GenerateKeyItem(&g_keyAlias01001, genParamSet, nullptr);
177     EXPECT_EQ(ret1.errorCode, (int32_t)OH_HUKS_SUCCESS) << "GenerateKey01 failed.";
178     ret1 = OH_Huks_GenerateKeyItem(&g_keyAlias02001, genParamSet, nullptr);
179     EXPECT_EQ(ret1.errorCode, (int32_t)OH_HUKS_SUCCESS) << "GenerateKey02 failed.";
180 
181     struct OH_Huks_Blob publicKey01 = {.size = OH_HUKS_DH_KEY_SIZE_4096, .data = nullptr};
182     struct OH_Huks_Blob publicKey02 = {.size = OH_HUKS_DH_KEY_SIZE_4096, .data = nullptr};
183     ret = MallocAndCheckBlobData(&publicKey01, publicKey01.size);
184     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Malloc publicKey01 failed.";
185     ret = MallocAndCheckBlobData(&publicKey02, publicKey02.size);
186     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Malloc publicKey02 failed.";
187     ret = HksDhAgreeExport(&g_keyAlias01001, &g_keyAlias02001, &publicKey01, &publicKey02, genParamSet);
188     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "ExportKey failed.";
189 
190     struct OH_Huks_Blob outData01 = {.size = DH_COMMON_SIZE, .data = nullptr};
191     struct OH_Huks_Blob outData02 = {.size = DH_COMMON_SIZE, .data = nullptr};
192     ret = MallocAndCheckBlobData(&outData01, outData01.size);
193     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Malloc outData01 failed.";
194     ret = MallocAndCheckBlobData(&outData02, outData02.size);
195     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Malloc outData02 failed.";
196     ret = HksDhAgreeFinish(&g_keyAlias01001, &publicKey02, initParamSet01, finishParamSet01, &outData01);
197     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "HksDhAgreeFinish01 failed.";
198     ret = HksDhAgreeFinish(&g_keyAlias02001, &publicKey01, initParamSet02, finishParamSet02, &outData02);
199     EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "HksDhAgreeFinish02 failed.";
200 
201     OH_Huks_DeleteKeyItem(&g_keyAlias01001, genParamSet);
202     OH_Huks_DeleteKeyItem(&g_keyAlias02001, genParamSet);
203     OH_Huks_DeleteKeyItem(&g_keyAliasFinal1001, finishParamSet01);
204     OH_Huks_DeleteKeyItem(&g_keyAliasFinal2001, finishParamSet01);
205     HksDhAgreeFreeParamSet(genParamSet, initParamSet01, finishParamSet01, initParamSet02, finishParamSet02);
206     HksDhAgreeFreeBlob(&publicKey01, &publicKey02, &outData01, &outData02);
207 }
208 }  // namespace Unittest::DhAgree