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
22 {
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)23 OH_Huks_Result HksEcdhAgreeFinish(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_Blob *publicKey,
24 const struct OH_Huks_ParamSet *initParamSet,
25 const struct OH_Huks_ParamSet *finishParamSet, struct OH_Huks_Blob *outData)
26 {
27 struct OH_Huks_Blob inData = {g_inData.length(), (uint8_t *)g_inData.c_str()};
28
29 uint8_t handleU[sizeof(uint64_t)] = {0};
30 struct OH_Huks_Blob handle = {sizeof(uint64_t), handleU};
31 OH_Huks_Result ret = OH_Huks_InitSession(keyAlias, initParamSet, &handle, nullptr);
32 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Init failed.";
33 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
34 return ret;
35 }
36
37 uint8_t outDataU[ECDH_COMMON_SIZE] = {0};
38 struct OH_Huks_Blob outDataUpdate = {ECDH_COMMON_SIZE, outDataU};
39 ret = OH_Huks_UpdateSession(&handle, initParamSet, publicKey, &outDataUpdate);
40 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Update failed.";
41 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
42 return ret;
43 }
44
45 ret = OH_Huks_FinishSession(&handle, finishParamSet, &inData, outData);
46 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Finish failed.";
47 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
48 return ret;
49 }
50 return ret;
51 }
52
HksEcdhAgreeAbort(const struct OH_Huks_Blob * keyAlias,const struct OH_Huks_Blob * publicKey,const struct OH_Huks_ParamSet * initParamSet)53 OH_Huks_Result HksEcdhAgreeAbort(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_Blob *publicKey,
54 const struct OH_Huks_ParamSet *initParamSet)
55 {
56 uint8_t handleU[sizeof(uint64_t)] = {0};
57 struct OH_Huks_Blob handle = {sizeof(uint64_t), handleU};
58 OH_Huks_Result ret = OH_Huks_InitSession(keyAlias, initParamSet, &handle, nullptr);
59 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Init failed.";
60 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
61 return ret;
62 }
63
64 uint8_t outDataU[ECDH_COMMON_SIZE] = {0};
65 struct OH_Huks_Blob outDataUpdate = {ECDH_COMMON_SIZE, outDataU};
66 ret = OH_Huks_UpdateSession(&handle, initParamSet, publicKey, &outDataUpdate);
67 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Update failed.";
68 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
69 return ret;
70 }
71
72 ret = OH_Huks_AbortSession(&handle, initParamSet);
73 EXPECT_EQ(ret.errorCode, (int32_t)OH_HUKS_SUCCESS) << "Finish failed.";
74 if (ret.errorCode != (int32_t)OH_HUKS_SUCCESS) {
75 return ret;
76 }
77 return ret;
78 }
79
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)80 OH_Huks_Result HksEcdhAgreeExport(const struct OH_Huks_Blob *keyAlias1, const struct OH_Huks_Blob *keyAlias2,
81 struct OH_Huks_Blob *publicKey1, struct OH_Huks_Blob *publicKey2,
82 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,
107 struct OH_Huks_ParamSet *paramSet5)
108 {
109 OH_Huks_FreeParamSet(¶mSet1);
110 OH_Huks_FreeParamSet(¶mSet2);
111 OH_Huks_FreeParamSet(¶mSet3);
112 OH_Huks_FreeParamSet(¶mSet4);
113 OH_Huks_FreeParamSet(¶mSet5);
114 }
115
HksEcdhAgreeFreeBlob(struct OH_Huks_Blob * blob1,struct OH_Huks_Blob * blob2)116 void HksEcdhAgreeFreeBlob(struct OH_Huks_Blob *blob1, struct OH_Huks_Blob *blob2)
117 {
118 HksFree(blob1->data);
119 HksFree(blob2->data);
120 }
121
HksEcdhAgreeFreeBlob(struct OH_Huks_Blob * blob1,struct OH_Huks_Blob * blob2,struct OH_Huks_Blob * blob3,struct OH_Huks_Blob * blob4)122 void HksEcdhAgreeFreeBlob(struct OH_Huks_Blob *blob1, struct OH_Huks_Blob *blob2, struct OH_Huks_Blob *blob3,
123 struct OH_Huks_Blob *blob4)
124 {
125 HksFree(blob1->data);
126 HksFree(blob2->data);
127 HksFree(blob3->data);
128 HksFree(blob4->data);
129 }
130 } // namespace Unittest::EcdhAgree