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