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_ecdh_test_common.h"
17
18 #include <gtest/gtest.h>
19
20 using namespace testing::ext;
21 namespace Unittest::EcdhAgree {
HksEcdhAgreeFinish(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)22 OH_Huks_Result HksEcdhAgreeFinish(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_Blob *publicKey,
23 const struct OH_Huks_ParamSet *initParamSet, const struct OH_Huks_ParamSet *finishParamSet, struct OH_Huks_Blob *outData)
24 {
25 struct OH_Huks_Blob inData = {
26 g_inData.length(),
27 (uint8_t *)g_inData.c_str()
28 };
29
30 uint8_t handleU[sizeof(uint64_t)] = {0};
31 struct OH_Huks_Blob handle = { sizeof(uint64_t), handleU };
32 OH_Huks_Result ret = OH_Huks_InitSession(keyAlias, initParamSet, &handle, nullptr);
33 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Init failed.";
34 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
35 return ret;
36 }
37
38 uint8_t outDataU[ECDH_COMMON_SIZE] = {0};
39 struct OH_Huks_Blob outDataUpdate = { ECDH_COMMON_SIZE, outDataU };
40 ret = OH_Huks_UpdateSession(&handle, initParamSet, publicKey, &outDataUpdate);
41 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Update failed.";
42 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
43 return ret;
44 }
45
46 ret = OH_Huks_FinishSession(&handle, finishParamSet, &inData, outData);
47 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Finish failed.";
48 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
49 return ret;
50 }
51 return ret;
52 }
53
HksEcdhAgreeAbort(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_Blob * publicKey,const struct OH_Huks_ParamSet * initParamSet)54 OH_Huks_Result HksEcdhAgreeAbort(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_Blob *publicKey,
55 const struct OH_Huks_ParamSet *initParamSet)
56 {
57 uint8_t handleU[sizeof(uint64_t)] = {0};
58 struct OH_Huks_Blob handle = { sizeof(uint64_t), handleU };
59 OH_Huks_Result ret = OH_Huks_InitSession(keyAlias, initParamSet, &handle, nullptr);
60 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Init failed.";
61 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
62 return ret;
63 }
64
65 uint8_t outDataU[ECDH_COMMON_SIZE] = {0};
66 struct OH_Huks_Blob outDataUpdate = { ECDH_COMMON_SIZE, outDataU };
67 ret = OH_Huks_UpdateSession(&handle, initParamSet, publicKey, &outDataUpdate);
68 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Update failed.";
69 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
70 return ret;
71 }
72
73 ret = OH_Huks_AbortSession(&handle, initParamSet);
74 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Finish failed.";
75 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
76 return ret;
77 }
78 return ret;
79 }
80
HksEcdhAgreeExport(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)81 OH_Huks_Result HksEcdhAgreeExport(const struct OH_Huks_Blob *keyAlias1, const struct OH_Huks_Blob *keyAlias2,
82 struct OH_Huks_Blob *publicKey1, struct OH_Huks_Blob *publicKey2, const struct OH_Huks_ParamSet *genParamSet)
83 {
84 OH_Huks_Result ret = OH_Huks_ExportPublicKeyItem(keyAlias1, genParamSet, publicKey1);
85 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "ExportPublicKey01 failed.";
86 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
87 return ret;
88 }
89 ret = OH_Huks_ExportPublicKeyItem(keyAlias2, genParamSet, publicKey2);
90 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "ExportPublicKey02 failed.";
91 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
92 return ret;
93 }
94 return ret;
95 }
96
HksEcdhAgreeFreeParamSet(struct OH_Huks_ParamSet * paramSet1,struct OH_Huks_ParamSet * paramSet2,struct OH_Huks_ParamSet * paramSet3)97 void HksEcdhAgreeFreeParamSet(struct OH_Huks_ParamSet *paramSet1, struct OH_Huks_ParamSet *paramSet2,
98 struct OH_Huks_ParamSet *paramSet3)
99 {
100 OH_Huks_FreeParamSet(¶mSet1);
101 OH_Huks_FreeParamSet(¶mSet2);
102 OH_Huks_FreeParamSet(¶mSet3);
103 }
104
HksEcdhAgreeFreeParamSet(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)105 void HksEcdhAgreeFreeParamSet(struct OH_Huks_ParamSet *paramSet1, struct OH_Huks_ParamSet *paramSet2,
106 struct OH_Huks_ParamSet *paramSet3, struct OH_Huks_ParamSet *paramSet4, struct OH_Huks_ParamSet *paramSet5)
107 {
108 OH_Huks_FreeParamSet(¶mSet1);
109 OH_Huks_FreeParamSet(¶mSet2);
110 OH_Huks_FreeParamSet(¶mSet3);
111 OH_Huks_FreeParamSet(¶mSet4);
112 OH_Huks_FreeParamSet(¶mSet5);
113 }
114
HksEcdhAgreeFreeBlob(struct OH_Huks_Blob * blob1,struct OH_Huks_Blob * blob2)115 void HksEcdhAgreeFreeBlob(struct OH_Huks_Blob *blob1, struct OH_Huks_Blob *blob2)
116 {
117 HksFree(blob1->data);
118 HksFree(blob2->data);
119 }
120
HksEcdhAgreeFreeBlob(struct OH_Huks_Blob * blob1,struct OH_Huks_Blob * blob2,struct OH_Huks_Blob * blob3,struct OH_Huks_Blob * blob4)121 void HksEcdhAgreeFreeBlob(struct OH_Huks_Blob *blob1, struct OH_Huks_Blob *blob2,
122 struct OH_Huks_Blob *blob3, struct OH_Huks_Blob *blob4)
123 {
124 HksFree(blob1->data);
125 HksFree(blob2->data);
126 HksFree(blob3->data);
127 HksFree(blob4->data);
128 }
129 }