• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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 #include <fstream>
18 #include <iostream>
19 #include "securec.h"
20 
21 #include "aes_common.h"
22 #include "aes_openssl.h"
23 #include "blob.h"
24 #include "cipher.h"
25 #include "detailed_iv_params.h"
26 #include "detailed_gcm_params.h"
27 #include "detailed_ccm_params.h"
28 #include "log.h"
29 #include "memory.h"
30 #include "sym_common_defines.h"
31 #include "sym_key_generator.h"
32 
33 using namespace std;
34 using namespace testing::ext;
35 
36 namespace {
37 class CryptoAesCtrCipherTest : public testing::Test {
38 public:
SetUpTestCase()39     static void SetUpTestCase() {};
TearDownTestCase()40     static void TearDownTestCase() {};
SetUp()41     void SetUp() {};
TearDown()42     void TearDown() {};
43 };
44 
45 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest001, TestSize.Level0)
46 {
47     uint8_t iv[16] = {0};
48     uint8_t cipherText[128] = {0};
49     int cipherTextLen = 128;
50 
51     HcfIvParamsSpec ivSpec = {};
52     HcfSymKeyGenerator *generator = nullptr;
53     HcfCipher *cipher = nullptr;
54     HcfSymKey *key = nullptr;
55     ivSpec.iv.data = iv;
56     ivSpec.iv.len = 16;
57 
58     int ret = HcfSymKeyGeneratorCreate("AES128", &generator);
59     ASSERT_EQ(ret, 0);
60 
61     ret = generator->generateSymKey(generator, &key);
62     ASSERT_EQ(ret, 0);
63 
64     ret = HcfCipherCreate("AES128|CTR|NoPadding", &cipher);
65     ASSERT_EQ(ret, 0);
66 
67     ret = AesEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen);
68     ASSERT_EQ(ret, 0);
69 
70     ret = AesDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen);
71     ASSERT_EQ(ret, 0);
72 
73     HcfObjDestroy((HcfObjectBase *)key);
74     HcfObjDestroy((HcfObjectBase *)cipher);
75     HcfObjDestroy((HcfObjectBase *)generator);
76 }
77 
78 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest002, TestSize.Level0)
79 {
80     uint8_t iv[16] = {0};
81     uint8_t cipherText[128] = {0};
82     int cipherTextLen = 128;
83 
84     HcfIvParamsSpec ivSpec = {};
85     HcfSymKeyGenerator *generator = nullptr;
86     HcfCipher *cipher = nullptr;
87     HcfSymKey *key = nullptr;
88     ivSpec.iv.data = iv;
89     ivSpec.iv.len = 16;
90 
91     int ret = HcfSymKeyGeneratorCreate("AES128", &generator);
92     ASSERT_EQ(ret, 0);
93 
94     ret = generator->generateSymKey(generator, &key);
95     ASSERT_EQ(ret, 0);
96 
97     ret = HcfCipherCreate("AES128|CTR|PKCS5", &cipher);
98     ASSERT_EQ(ret, 0);
99 
100     ret = AesEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen);
101     ASSERT_EQ(ret, 0);
102 
103     ret = AesDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen);
104     ASSERT_EQ(ret, 0);
105 
106     HcfObjDestroy((HcfObjectBase *)key);
107     HcfObjDestroy((HcfObjectBase *)cipher);
108     HcfObjDestroy((HcfObjectBase *)generator);
109 }
110 
111 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest003, TestSize.Level0)
112 {
113     uint8_t iv[16] = {0};
114     uint8_t cipherText[128] = {0};
115     int cipherTextLen = 128;
116 
117     HcfIvParamsSpec ivSpec = {};
118     HcfSymKeyGenerator *generator = nullptr;
119     HcfCipher *cipher = nullptr;
120     HcfSymKey *key = nullptr;
121     ivSpec.iv.data = iv;
122     ivSpec.iv.len = 16;
123 
124     int ret = HcfSymKeyGeneratorCreate("AES128", &generator);
125     ASSERT_EQ(ret, 0);
126 
127     ret = generator->generateSymKey(generator, &key);
128     ASSERT_EQ(ret, 0);
129 
130     ret = HcfCipherCreate("AES128|CTR|PKCS7", &cipher);
131     ASSERT_EQ(ret, 0);
132 
133     ret = AesEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen);
134     ASSERT_EQ(ret, 0);
135 
136     ret = AesDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen);
137     ASSERT_EQ(ret, 0);
138 
139     HcfObjDestroy((HcfObjectBase *)key);
140     HcfObjDestroy((HcfObjectBase *)cipher);
141     HcfObjDestroy((HcfObjectBase *)generator);
142 }
143 
144 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest004, TestSize.Level0)
145 {
146     uint8_t iv[16] = {0};
147     uint8_t cipherText[128] = {0};
148     int cipherTextLen = 128;
149 
150     HcfIvParamsSpec ivSpec = {};
151     HcfSymKeyGenerator *generator = nullptr;
152     HcfCipher *cipher = nullptr;
153     HcfSymKey *key = nullptr;
154     ivSpec.iv.data = iv;
155     ivSpec.iv.len = 16;
156 
157     int ret = HcfSymKeyGeneratorCreate("AES128", &generator);
158     ASSERT_EQ(ret, 0);
159 
160     ret = generator->generateSymKey(generator, &key);
161     ASSERT_EQ(ret, 0);
162 
163     ret = HcfCipherCreate("AES128|CTR|NoPadding", &cipher);
164     ASSERT_EQ(ret, 0);
165 
166     ret = AesNoUpdateEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen);
167     ASSERT_EQ(ret, 0);
168 
169     ret = AesNoUpdateDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen);
170     ASSERT_EQ(ret, 0);
171 
172     HcfObjDestroy((HcfObjectBase *)key);
173     HcfObjDestroy((HcfObjectBase *)cipher);
174     HcfObjDestroy((HcfObjectBase *)generator);
175 }
176 
177 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest005, TestSize.Level0)
178 {
179     uint8_t iv[16] = {0};
180     uint8_t cipherText[128] = {0};
181     int cipherTextLen = 128;
182 
183     HcfIvParamsSpec ivSpec = {};
184     HcfSymKeyGenerator *generator = nullptr;
185     HcfCipher *cipher = nullptr;
186     HcfSymKey *key = nullptr;
187     ivSpec.iv.data = iv;
188     ivSpec.iv.len = 16;
189 
190     int ret = HcfSymKeyGeneratorCreate("AES128", &generator);
191     ASSERT_EQ(ret, 0);
192 
193     ret = generator->generateSymKey(generator, &key);
194     ASSERT_EQ(ret, 0);
195 
196     ret = HcfCipherCreate("AES128|CTR|PKCS5", &cipher);
197     ASSERT_EQ(ret, 0);
198 
199     ret = AesNoUpdateEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen);
200     ASSERT_EQ(ret, 0);
201 
202     ret = AesNoUpdateDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen);
203     ASSERT_EQ(ret, 0);
204 
205     HcfObjDestroy((HcfObjectBase *)key);
206     HcfObjDestroy((HcfObjectBase *)cipher);
207     HcfObjDestroy((HcfObjectBase *)generator);
208 }
209 
210 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest006, TestSize.Level0)
211 {
212     uint8_t iv[16] = {0};
213     uint8_t cipherText[128] = {0};
214     int cipherTextLen = 128;
215 
216     HcfIvParamsSpec ivSpec = {};
217     HcfSymKeyGenerator *generator = nullptr;
218     HcfCipher *cipher = nullptr;
219     HcfSymKey *key = nullptr;
220     ivSpec.iv.data = iv;
221     ivSpec.iv.len = 16;
222 
223     int ret = HcfSymKeyGeneratorCreate("AES128", &generator);
224     ASSERT_EQ(ret, 0);
225 
226     ret = generator->generateSymKey(generator, &key);
227     ASSERT_EQ(ret, 0);
228 
229     ret = HcfCipherCreate("AES128|CTR|PKCS7", &cipher);
230     ASSERT_EQ(ret, 0);
231 
232     ret = AesNoUpdateEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen);
233     ASSERT_EQ(ret, 0);
234 
235     ret = AesNoUpdateDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen);
236     ASSERT_EQ(ret, 0);
237 
238     HcfObjDestroy((HcfObjectBase *)key);
239     HcfObjDestroy((HcfObjectBase *)cipher);
240     HcfObjDestroy((HcfObjectBase *)generator);
241 }
242 
243 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest007, TestSize.Level0)
244 {
245     uint8_t iv[16] = {0};
246 
247     HcfIvParamsSpec ivSpec = {};
248     HcfCipher *cipher = nullptr;
249     HcfSymKey *key = nullptr;
250     ivSpec.iv.data = iv;
251     ivSpec.iv.len = 16;
252 
253     int ret = ConvertSymKey("AES128", &key);
254     ASSERT_EQ(ret, 0);
255 
256     ret = HcfCipherCreate("AES128|CTR|NoPadding", &cipher);
257     ASSERT_EQ(ret, 0);
258 
259     ret = GeneratorFile("/data/test_aes.txt", 10 * FILE_BLOCK_SIZE);
260     ASSERT_EQ(ret, 0);
261 
262     ret = AesMultiBlockEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec);
263     ASSERT_EQ(ret, 0);
264 
265     ret = AesMultiBlockDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec);
266     ASSERT_EQ(ret, 0);
267 
268     ret = CompareFileContent();
269     ASSERT_EQ(ret, 0);
270 
271     HcfObjDestroy((HcfObjectBase *)key);
272     HcfObjDestroy((HcfObjectBase *)cipher);
273 }
274 
275 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest008, TestSize.Level0)
276 {
277     uint8_t iv[AES_IV_LEN] = { 0 };
278     uint8_t cipherText[CIPHER_TEXT_LEN] = { 0 };
279     int cipherTextLen = CIPHER_TEXT_LEN;
280 
281     HcfIvParamsSpec ivSpec = {};
282     HcfCipher *cipher = nullptr;
283     HcfSymKey *key = nullptr;
284     ivSpec.iv.data = iv;
285     ivSpec.iv.len = AES_IV_LEN;
286 
287     int ret = GenerateSymKey("AES192", &key);
288     ASSERT_EQ(ret, 0);
289 
290     ret = HcfCipherCreate("AES192|CTR|PKCS5", &cipher);
291     ASSERT_EQ(ret, 0);
292 
293     ret = AesEncrypt(cipher, key, &(ivSpec.base), cipherText, &cipherTextLen);
294     ASSERT_EQ(ret, 0);
295 
296     ret = AesDecrypt(cipher, key, &(ivSpec.base), cipherText, cipherTextLen);
297     ASSERT_EQ(ret, 0);
298 
299     HcfObjDestroy(key);
300     HcfObjDestroy(cipher);
301 }
302 
303 HWTEST_F(CryptoAesCtrCipherTest, CryptoAesCtrCipherTest009, TestSize.Level0)
304 {
305     uint8_t iv[AES_IV_LEN] = { 0 };
306     uint8_t cipherText[CIPHER_TEXT_LEN] = { 0 };
307     int cipherTextLen = CIPHER_TEXT_LEN;
308 
309     HcfIvParamsSpec ivSpec = {};
310     HcfCipher *cipher = nullptr;
311     HcfSymKey *key = nullptr;
312     ivSpec.iv.data = iv;
313     ivSpec.iv.len = AES_IV_LEN;
314 
315     int ret = GenerateSymKey("AES256", &key);
316     ASSERT_EQ(ret, 0);
317 
318     ret = HcfCipherCreate("AES256|CTR|PKCS5", &cipher);
319     ASSERT_EQ(ret, 0);
320 
321     ret = AesEncrypt(cipher, key, &(ivSpec.base), cipherText, &cipherTextLen);
322     ASSERT_EQ(ret, 0);
323 
324     ret = AesDecrypt(cipher, key, &(ivSpec.base), cipherText, cipherTextLen);
325     ASSERT_EQ(ret, 0);
326 
327     HcfObjDestroy(key);
328     HcfObjDestroy(cipher);
329 }
330 }