• 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 "hks_pbkdf2_derive_part1_test.h"
17 #include "hks_pbkdf2_derive_test_common.h"
18 
19 #include <gtest/gtest.h>
20 
21 using namespace testing::ext;
22 namespace Unittest::Pbkdf2Derive {
23 class HksPbkdf2DerivePart1Test : public testing::Test {
24 public:
25     static void SetUpTestCase(void);
26 
27     static void TearDownTestCase(void);
28 
29     void SetUp();
30 
31     void TearDown();
32 };
33 
SetUpTestCase(void)34 void HksPbkdf2DerivePart1Test::SetUpTestCase(void)
35 {
36 }
37 
TearDownTestCase(void)38 void HksPbkdf2DerivePart1Test::TearDownTestCase(void)
39 {
40 }
41 
SetUp()42 void HksPbkdf2DerivePart1Test::SetUp()
43 {
44 }
45 
TearDown()46 void HksPbkdf2DerivePart1Test::TearDown()
47 {
48 }
49 
50 uint8_t g_saltdata1[16] = {0};
51 
52 static struct HksParam g_genParams001[] = {
53     {
54         .tag = HKS_TAG_ALGORITHM,
55         .uint32Param = HKS_ALG_AES
56     }, {
57         .tag = HKS_TAG_PURPOSE,
58         .uint32Param = HKS_KEY_PURPOSE_DERIVE
59     }, {
60         .tag = HKS_TAG_DIGEST,
61         .uint32Param = HKS_DIGEST_SHA256
62     }, {
63         .tag = HKS_TAG_KEY_SIZE,
64         .uint32Param = 256
65     }
66 };
67 static struct HksParam g_pbkdf2Params001[] = {
68     {
69         .tag = HKS_TAG_ALGORITHM,
70         .uint32Param = HKS_ALG_PBKDF2
71     }, {
72         .tag = HKS_TAG_PURPOSE,
73         .uint32Param = HKS_KEY_PURPOSE_DERIVE
74     }, {
75         .tag = HKS_TAG_DIGEST,
76         .uint32Param = HKS_DIGEST_SHA256
77     }, {
78         .tag = HKS_TAG_KEY_SIZE,
79         .uint32Param = 256
80     }, {
81         .tag = HKS_TAG_ITERATION,
82         .int32Param = DERIVE_ITERATION
83     }, {
84         .tag = HKS_TAG_SALT,
85         .blob = {
86             sizeof(g_saltdata1),
87             (uint8_t *)g_saltdata1
88         }
89     }, {
90         .tag = HKS_TAG_DERIVE_KEY_SIZE,
91         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_32
92     }
93 };
94 static struct HksParam g_pbkdf2FinishParams001[] = {
95     {
96         .tag = HKS_TAG_KEY_STORAGE_FLAG,
97         .uint32Param = HKS_STORAGE_PERSISTENT
98     }, {
99         .tag = HKS_TAG_KEY_ALIAS,
100         .blob = {
101             strlen("HksPBKDF2DeriveKeyAliasTest001_2"),
102             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest001_2"
103         }
104     }, {
105         .tag = HKS_TAG_ALGORITHM,
106         .uint32Param = HKS_ALG_AES
107     }, {
108         .tag = HKS_TAG_KEY_SIZE,
109         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_32
110     }, {
111         .tag = HKS_TAG_PURPOSE,
112         .uint32Param = HKS_KEY_PURPOSE_DERIVE
113     }, {
114         .tag = HKS_TAG_DIGEST,
115         .uint32Param = HKS_DIGEST_SHA256
116     }
117 };
118 static struct HksParam g_genParams002[] = {
119     {
120         .tag = HKS_TAG_ALGORITHM,
121         .uint32Param = HKS_ALG_AES
122     }, {
123         .tag = HKS_TAG_PURPOSE,
124         .uint32Param = HKS_KEY_PURPOSE_DERIVE
125     }, {
126         .tag = HKS_TAG_DIGEST,
127         .uint32Param = HKS_DIGEST_SHA256
128     }, {
129         .tag = HKS_TAG_KEY_SIZE,
130         .uint32Param = HKS_AES_KEY_SIZE_192
131     }
132 };
133 static struct HksParam g_pbkdf2Params002[] = {
134     {
135         .tag = HKS_TAG_ALGORITHM,
136         .uint32Param = HKS_ALG_PBKDF2
137     }, {
138         .tag = HKS_TAG_PURPOSE,
139         .uint32Param = HKS_KEY_PURPOSE_DERIVE
140     }, {
141         .tag = HKS_TAG_DIGEST,
142         .uint32Param = HKS_DIGEST_SHA256
143     }, {
144         .tag = HKS_TAG_ITERATION,
145         .int32Param = DERIVE_ITERATION
146     }, {
147         .tag = HKS_TAG_SALT,
148         .blob = {
149             sizeof(g_saltdata1),
150             (uint8_t *)g_saltdata1
151         }
152     }, {
153         .tag = HKS_TAG_DERIVE_KEY_SIZE,
154         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_32
155     }
156 };
157 static struct HksParam g_pbkdf2FinishParams002[] = {
158     {
159         .tag = HKS_TAG_KEY_STORAGE_FLAG,
160         .uint32Param = HKS_STORAGE_PERSISTENT
161     }, {
162         .tag = HKS_TAG_KEY_ALIAS,
163         .blob = {
164             strlen("HksPBKDF2DeriveKeyAliasTest002_2"),
165             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest002_2"
166         }
167     }, {
168         .tag = HKS_TAG_ALGORITHM,
169         .uint32Param = HKS_ALG_AES
170     }, {
171         .tag = HKS_TAG_KEY_SIZE,
172         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_32
173     }, {
174         .tag = HKS_TAG_PURPOSE,
175         .uint32Param = HKS_KEY_PURPOSE_DERIVE
176     }, {
177         .tag = HKS_TAG_DIGEST,
178         .uint32Param = HKS_DIGEST_SHA256
179     }
180 };
181 static struct HksParam g_genParams003[] = {
182     {
183         .tag = HKS_TAG_ALGORITHM,
184         .uint32Param = HKS_ALG_AES
185     }, {
186         .tag = HKS_TAG_PURPOSE,
187         .uint32Param = HKS_KEY_PURPOSE_DERIVE
188     }, {
189         .tag = HKS_TAG_DIGEST,
190         .uint32Param = HKS_DIGEST_SHA256
191     }, {
192         .tag = HKS_TAG_KEY_SIZE,
193         .uint32Param = HKS_AES_KEY_SIZE_256
194     }
195 };
196 static struct HksParam g_pbkdf2Params003[] = {
197     {
198         .tag = HKS_TAG_ALGORITHM,
199         .uint32Param = HKS_ALG_PBKDF2
200     }, {
201         .tag = HKS_TAG_PURPOSE,
202         .uint32Param = HKS_KEY_PURPOSE_DERIVE
203     }, {
204         .tag = HKS_TAG_DIGEST,
205         .uint32Param = HKS_DIGEST_SHA256
206     }, {
207         .tag = HKS_TAG_ITERATION,
208         .int32Param = DERIVE_ITERATION
209     }, {
210         .tag = HKS_TAG_SALT,
211         .blob = {
212             sizeof(g_saltdata1),
213             (uint8_t *)g_saltdata1
214         }
215     }, {
216         .tag = HKS_TAG_DERIVE_KEY_SIZE,
217         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_32
218     }
219 };
220 static struct HksParam g_pbkdf2FinishParams003[] = {
221     {
222         .tag = HKS_TAG_KEY_STORAGE_FLAG,
223         .uint32Param = HKS_STORAGE_PERSISTENT
224     }, {
225         .tag = HKS_TAG_KEY_ALIAS,
226         .blob = {
227             strlen("HksPBKDF2DeriveKeyAliasTest003_2"),
228             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest003_2"
229         }
230     }, {
231         .tag = HKS_TAG_ALGORITHM,
232         .uint32Param = HKS_ALG_AES
233     }, {
234         .tag = HKS_TAG_KEY_SIZE,
235         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_32
236     }, {
237         .tag = HKS_TAG_PURPOSE,
238         .uint32Param = HKS_KEY_PURPOSE_DERIVE
239     }, {
240         .tag = HKS_TAG_DIGEST,
241         .uint32Param = HKS_DIGEST_SHA256
242     }
243 };
244 static struct HksParam g_genParams004[] = {
245     {
246         .tag = HKS_TAG_ALGORITHM,
247         .uint32Param = HKS_ALG_AES
248     }, {
249         .tag = HKS_TAG_PURPOSE,
250         .uint32Param = HKS_KEY_PURPOSE_DERIVE
251     }, {
252         .tag = HKS_TAG_DIGEST,
253         .uint32Param = HKS_DIGEST_SHA384
254     }, {
255         .tag = HKS_TAG_KEY_SIZE,
256         .uint32Param = HKS_AES_KEY_SIZE_128
257     }
258 };
259 static struct HksParam g_pbkdf2Params004[] = {
260     {
261         .tag = HKS_TAG_ALGORITHM,
262         .uint32Param = HKS_ALG_PBKDF2
263     }, {
264         .tag = HKS_TAG_PURPOSE,
265         .uint32Param = HKS_KEY_PURPOSE_DERIVE
266     }, {
267         .tag = HKS_TAG_DIGEST,
268         .uint32Param = HKS_DIGEST_SHA384
269     }, {
270         .tag = HKS_TAG_ITERATION,
271         .int32Param = DERIVE_ITERATION
272     }, {
273         .tag = HKS_TAG_SALT,
274         .blob = {
275             sizeof(g_saltdata1),
276             (uint8_t *)g_saltdata1
277         }
278     }, {
279         .tag = HKS_TAG_DERIVE_KEY_SIZE,
280         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_48
281     }
282 };
283 static struct HksParam g_pbkdf2FinishParams004[] = {
284     {
285         .tag = HKS_TAG_KEY_STORAGE_FLAG,
286         .uint32Param = HKS_STORAGE_PERSISTENT
287     }, {
288         .tag = HKS_TAG_KEY_ALIAS,
289         .blob = {
290             strlen("HksPBKDF2DeriveKeyAliasTest004_2"),
291             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest004_2"
292         }
293     }, {
294         .tag = HKS_TAG_ALGORITHM,
295         .uint32Param = HKS_ALG_AES
296     }, {
297         .tag = HKS_TAG_KEY_SIZE,
298         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_48
299     }, {
300         .tag = HKS_TAG_PURPOSE,
301         .uint32Param = HKS_KEY_PURPOSE_DERIVE
302     }, {
303         .tag = HKS_TAG_DIGEST,
304         .uint32Param = HKS_DIGEST_SHA384
305     }
306 };
307 static struct HksParam g_genParams005[] = {
308     {
309         .tag = HKS_TAG_ALGORITHM,
310         .uint32Param = HKS_ALG_AES
311     }, {
312         .tag = HKS_TAG_PURPOSE,
313         .uint32Param = HKS_KEY_PURPOSE_DERIVE
314     }, {
315         .tag = HKS_TAG_DIGEST,
316         .uint32Param = HKS_DIGEST_SHA384
317     }, {
318         .tag = HKS_TAG_KEY_SIZE,
319         .uint32Param = HKS_AES_KEY_SIZE_192
320     }
321 };
322 static struct HksParam g_pbkdf2Params005[] = {
323     {
324         .tag = HKS_TAG_ALGORITHM,
325         .uint32Param = HKS_ALG_PBKDF2
326     }, {
327         .tag = HKS_TAG_PURPOSE,
328         .uint32Param = HKS_KEY_PURPOSE_DERIVE
329     }, {
330         .tag = HKS_TAG_DIGEST,
331         .uint32Param = HKS_DIGEST_SHA384
332     }, {
333         .tag = HKS_TAG_ITERATION,
334         .int32Param = DERIVE_ITERATION
335     }, {
336         .tag = HKS_TAG_SALT,
337         .blob = {
338             sizeof(g_saltdata1),
339             (uint8_t *)g_saltdata1
340         }
341     }, {
342         .tag = HKS_TAG_DERIVE_KEY_SIZE,
343         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_48
344     }
345 };
346 static struct HksParam g_pbkdf2FinishParams005[] = {
347     {
348         .tag = HKS_TAG_KEY_STORAGE_FLAG,
349         .uint32Param = HKS_STORAGE_PERSISTENT
350     }, {
351         .tag = HKS_TAG_KEY_ALIAS,
352         .blob = {
353             strlen("HksPBKDF2DeriveKeyAliasTest005_2"),
354             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest005_2"
355         }
356     }, {
357         .tag = HKS_TAG_ALGORITHM,
358         .uint32Param = HKS_ALG_AES
359     }, {
360         .tag = HKS_TAG_KEY_SIZE,
361         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_48
362     }, {
363         .tag = HKS_TAG_PURPOSE,
364         .uint32Param = HKS_KEY_PURPOSE_DERIVE
365     }, {
366         .tag = HKS_TAG_DIGEST,
367         .uint32Param = HKS_DIGEST_SHA384
368     }
369 };
370 static struct HksParam g_genParams006[] = {
371     {
372         .tag = HKS_TAG_ALGORITHM,
373         .uint32Param = HKS_ALG_AES
374     }, {
375         .tag = HKS_TAG_PURPOSE,
376         .uint32Param = HKS_KEY_PURPOSE_DERIVE
377     }, {
378         .tag = HKS_TAG_DIGEST,
379         .uint32Param = HKS_DIGEST_SHA384
380     }, {
381         .tag = HKS_TAG_KEY_SIZE,
382         .uint32Param = HKS_AES_KEY_SIZE_256}
383 };
384 static struct HksParam g_pbkdf2Params006[] = {
385     {
386         .tag = HKS_TAG_ALGORITHM,
387         .uint32Param = HKS_ALG_PBKDF2
388     }, {
389         .tag = HKS_TAG_PURPOSE,
390         .uint32Param = HKS_KEY_PURPOSE_DERIVE
391     }, {
392         .tag = HKS_TAG_DIGEST,
393         .uint32Param = HKS_DIGEST_SHA384
394     }, {
395         .tag = HKS_TAG_ITERATION,
396         .int32Param = DERIVE_ITERATION
397     }, {
398         .tag = HKS_TAG_SALT,
399         .blob = {
400             sizeof(g_saltdata1),
401             (uint8_t *)g_saltdata1
402         }
403     }, {
404         .tag = HKS_TAG_DERIVE_KEY_SIZE,
405         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_48
406     }
407 };
408 static struct HksParam g_pbkdf2FinishParams006[] = {
409     {
410         .tag = HKS_TAG_KEY_STORAGE_FLAG,
411         .uint32Param = HKS_STORAGE_PERSISTENT
412     }, {
413         .tag = HKS_TAG_KEY_ALIAS,
414         .blob = {
415             strlen("HksPBKDF2DeriveKeyAliasTest006_2Finish"),
416             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest006_2Finish"
417         }
418     }, {
419         .tag = HKS_TAG_ALGORITHM,
420         .uint32Param = HKS_ALG_AES
421     }, {
422         .tag = HKS_TAG_KEY_SIZE,
423         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_48
424     }, {
425         .tag = HKS_TAG_PURPOSE,
426         .uint32Param = HKS_KEY_PURPOSE_DERIVE
427     }, {
428         .tag = HKS_TAG_DIGEST,
429         .uint32Param = HKS_DIGEST_SHA384
430     }
431 };
432 static struct HksParam g_genParams007[] = {
433     {
434         .tag = HKS_TAG_ALGORITHM,
435         .uint32Param = HKS_ALG_AES
436     }, {
437         .tag = HKS_TAG_PURPOSE,
438         .uint32Param = HKS_KEY_PURPOSE_DERIVE
439     }, {
440         .tag = HKS_TAG_DIGEST,
441         .uint32Param = HKS_DIGEST_SHA512
442     }, {
443         .tag = HKS_TAG_KEY_SIZE,
444         .uint32Param = HKS_AES_KEY_SIZE_128
445     }
446 };
447 static struct HksParam g_pbkdf2Params007[] = {
448     {
449         .tag = HKS_TAG_ALGORITHM,
450         .uint32Param = HKS_ALG_PBKDF2
451     }, {
452         .tag = HKS_TAG_PURPOSE,
453         .uint32Param = HKS_KEY_PURPOSE_DERIVE
454     }, {
455         .tag = HKS_TAG_DIGEST,
456         .uint32Param = HKS_DIGEST_SHA512
457     }, {
458         .tag = HKS_TAG_ITERATION,
459         .int32Param = DERIVE_ITERATION
460     }, {
461         .tag = HKS_TAG_SALT,
462         .blob = {
463             sizeof(g_saltdata1),
464             (uint8_t *)g_saltdata1
465         }
466     }, {
467         .tag = HKS_TAG_DERIVE_KEY_SIZE,
468         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_64
469     }
470 };
471 static struct HksParam g_pbkdf2FinishParams007[] = {
472     {
473         .tag = HKS_TAG_KEY_STORAGE_FLAG,
474         .uint32Param = HKS_STORAGE_PERSISTENT
475     }, {
476         .tag = HKS_TAG_KEY_ALIAS,
477         .blob = {
478             strlen("HksPBKDF2DeriveKeyAliasTest007_2Finish"),
479             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest007_2Finish"
480         }
481     }, {
482         .tag = HKS_TAG_ALGORITHM,
483         .uint32Param = HKS_ALG_AES
484     }, {
485         .tag = HKS_TAG_KEY_SIZE,
486         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_64
487     }, {
488         .tag = HKS_TAG_PURPOSE,
489         .uint32Param = HKS_KEY_PURPOSE_DERIVE
490     }, {
491         .tag = HKS_TAG_DIGEST,
492         .uint32Param = HKS_DIGEST_SHA512
493     }
494 };
495 static struct HksParam g_genParams008[] = {
496     {
497         .tag = HKS_TAG_ALGORITHM,
498         .uint32Param = HKS_ALG_AES
499     }, {
500         .tag = HKS_TAG_PURPOSE,
501         .uint32Param = HKS_KEY_PURPOSE_DERIVE
502     }, {
503         .tag = HKS_TAG_DIGEST,
504         .uint32Param = HKS_DIGEST_SHA512
505     }, {
506         .tag = HKS_TAG_KEY_SIZE,
507         .uint32Param = HKS_AES_KEY_SIZE_192
508     }
509 };
510 static struct HksParam g_pbkdf2Params008[] = {
511     {
512         .tag = HKS_TAG_ALGORITHM,
513         .uint32Param = HKS_ALG_PBKDF2
514     }, {
515         .tag = HKS_TAG_PURPOSE,
516         .uint32Param = HKS_KEY_PURPOSE_DERIVE
517     }, {
518         .tag = HKS_TAG_DIGEST,
519         .uint32Param = HKS_DIGEST_SHA512
520     }, {
521         .tag = HKS_TAG_ITERATION,
522         .int32Param = DERIVE_ITERATION
523     }, {
524         .tag = HKS_TAG_SALT,
525         .blob = {
526             sizeof(g_saltdata1),
527             (uint8_t *)g_saltdata1
528         }
529     }, {
530         .tag = HKS_TAG_DERIVE_KEY_SIZE,
531         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_64
532     }
533 };
534 static struct HksParam g_pbkdf2FinishParams008[] = {
535     {
536         .tag = HKS_TAG_KEY_STORAGE_FLAG,
537         .uint32Param = HKS_STORAGE_PERSISTENT
538     }, {
539         .tag = HKS_TAG_KEY_ALIAS,
540         .blob = {
541             strlen("HksPBKDF2DeriveKeyAliasTest008_2Finish"),
542             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest008_2Finish"
543         }
544     }, {
545         .tag = HKS_TAG_ALGORITHM,
546         .uint32Param = HKS_ALG_AES
547     }, {
548         .tag = HKS_TAG_KEY_SIZE,
549         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_64
550     }, {
551         .tag = HKS_TAG_PURPOSE,
552         .uint32Param = HKS_KEY_PURPOSE_DERIVE
553     }, {
554         .tag = HKS_TAG_DIGEST,
555         .uint32Param = HKS_DIGEST_SHA512
556     }
557 };
558 static struct HksParam g_genParams009[] = {
559     {
560         .tag = HKS_TAG_ALGORITHM,
561         .uint32Param = HKS_ALG_AES
562     }, {
563         .tag = HKS_TAG_PURPOSE,
564         .uint32Param = HKS_KEY_PURPOSE_DERIVE
565     }, {
566         .tag = HKS_TAG_DIGEST,
567         .uint32Param = HKS_DIGEST_SHA512
568     }, {
569         .tag = HKS_TAG_KEY_SIZE,
570         .uint32Param = HKS_AES_KEY_SIZE_256
571     }
572 };
573 static struct HksParam g_pbkdf2Params009[] = {
574     {
575         .tag = HKS_TAG_ALGORITHM,
576         .uint32Param = HKS_ALG_PBKDF2
577     }, {
578         .tag = HKS_TAG_PURPOSE,
579         .uint32Param = HKS_KEY_PURPOSE_DERIVE
580     }, {
581         .tag = HKS_TAG_DIGEST,
582         .uint32Param = HKS_DIGEST_SHA512
583     }, {
584         .tag = HKS_TAG_ITERATION,
585         .int32Param = DERIVE_ITERATION
586     }, {
587         .tag = HKS_TAG_SALT,
588         .blob = {
589             sizeof(g_saltdata1),
590             (uint8_t *)g_saltdata1
591         }
592     }, {
593         .tag = HKS_TAG_DERIVE_KEY_SIZE,
594         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_64
595     }
596 };
597 static struct HksParam g_pbkdf2FinishParams009[] = {
598     {
599         .tag = HKS_TAG_KEY_STORAGE_FLAG,
600         .uint32Param = HKS_STORAGE_PERSISTENT
601     }, {
602         .tag = HKS_TAG_KEY_ALIAS,
603         .blob = {
604             strlen("HksPBKDF2DeriveKeyAliasTest009_2Finish"),
605             (uint8_t *)"HksPBKDF2DeriveKeyAliasTest009_2Finish"
606         }
607     }, {
608         .tag = HKS_TAG_ALGORITHM,
609         .uint32Param = HKS_ALG_AES
610     }, {
611         .tag = HKS_TAG_KEY_SIZE,
612         .uint32Param = Unittest::Pbkdf2Derive::DERIVE_KEY_SIZE_64
613     }, {
614         .tag = HKS_TAG_PURPOSE,
615         .uint32Param = HKS_KEY_PURPOSE_DERIVE
616     }, {
617         .tag = HKS_TAG_DIGEST,
618         .uint32Param = HKS_DIGEST_SHA512
619     }
620 };
621 
622 /**
623  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive001
624  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
625  * @tc.type: FUNC
626  */
627 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive001, TestSize.Level0)
628 {
629     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest001_1"),
630         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest001_1" };
631     int32_t ret = HKS_FAILURE;
632     /* 1. Generate Key */
633     struct HksParamSet *genParamSet = nullptr;
634     ret = InitParamSet(&genParamSet, g_genParams001, sizeof(g_genParams001)/sizeof(HksParam));
635     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
636 
637     /* 2. PBKDF2 Three Stage */
638     struct HksParamSet *pbkdf2ParamSet = nullptr;
639     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
640     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params001, sizeof(g_pbkdf2Params001)/sizeof(HksParam));
641     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
642     struct HksParam *saltParam = nullptr;
643     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
644     ret = HksGenerateRandom(NULL, &(saltParam->blob));
645     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
646     // Finish paramset
647     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams001,
648         sizeof(g_pbkdf2FinishParams001)/sizeof(HksParam));
649     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
650 
651     // init-update-final
652     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
653     /* 3. Delete Key */
654     ret = HksDeleteKey(&keyAlias, genParamSet);
655     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
656     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest001_2"),
657         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest001_2"};
658     ret = HksDeleteKey(&deleteKeyAlias, NULL);
659     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
660 
661     HksFreeParamSet(&genParamSet);
662     HksFreeParamSet(&pbkdf2ParamSet);
663     HksFreeParamSet(&pbkdf2FinishParamSet);
664 }
665 
666 /**
667  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive002
668  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
669  * @tc.type: FUNC
670  */
671 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive002, TestSize.Level0)
672 {
673     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest002_1"),
674         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest002_1" };
675     int32_t ret = HKS_FAILURE;
676     /* 1. Generate Key */
677     struct HksParamSet *genParamSet = nullptr;
678     ret = InitParamSet(&genParamSet, g_genParams002, sizeof(g_genParams002)/sizeof(HksParam));
679     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
680 
681     /* 2. PBKDF2 Three Stage */
682     struct HksParamSet *pbkdf2ParamSet = nullptr;
683     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
684     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params002, sizeof(g_pbkdf2Params002)/sizeof(HksParam));
685     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
686     struct HksParam *saltParam = nullptr;
687     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
688     ret = HksGenerateRandom(NULL, &(saltParam->blob));
689     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
690     // Finish paramset
691     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams002,
692         sizeof(g_pbkdf2FinishParams002)/sizeof(HksParam));
693     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
694 
695     // init-update-final
696     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
697     /* 3. Delete Key */
698     ret = HksDeleteKey(&keyAlias, genParamSet);
699     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
700     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest002_2"),
701         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest002_2"};
702     ret = HksDeleteKey(&deleteKeyAlias, NULL);
703     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
704 
705     HksFreeParamSet(&genParamSet);
706     HksFreeParamSet(&pbkdf2ParamSet);
707     HksFreeParamSet(&pbkdf2FinishParamSet);
708 }
709 
710 /**
711  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive003
712  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
713  * @tc.type: FUNC
714  */
715 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive003, TestSize.Level0)
716 {
717     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest003_1"),
718         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest003_1" };
719     int32_t ret = HKS_FAILURE;
720     /* 1. Generate Key */
721     struct HksParamSet *genParamSet = nullptr;
722     ret = InitParamSet(&genParamSet, g_genParams003, sizeof(g_genParams003)/sizeof(HksParam));
723     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
724 
725     /* 2. PBKDF2 Three Stage */
726     struct HksParamSet *pbkdf2ParamSet = nullptr;
727     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
728     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params003, sizeof(g_pbkdf2Params003)/sizeof(HksParam));
729     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
730     struct HksParam *saltParam = nullptr;
731     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
732     ret = HksGenerateRandom(NULL, &(saltParam->blob));
733     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
734     // Finish paramset
735     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams003,
736         sizeof(g_pbkdf2FinishParams003)/sizeof(HksParam));
737     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
738 
739     // init-update-final
740     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
741     /* 3. Delete Key */
742     ret = HksDeleteKey(&keyAlias, genParamSet);
743     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
744     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest003_2"),
745         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest003_2"};
746     ret = HksDeleteKey(&deleteKeyAlias, NULL);
747     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
748 
749     HksFreeParamSet(&genParamSet);
750     HksFreeParamSet(&pbkdf2ParamSet);
751     HksFreeParamSet(&pbkdf2FinishParamSet);
752 }
753 
754 /**
755  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive004
756  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
757  * @tc.type: FUNC
758  */
759 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive004, TestSize.Level0)
760 {
761     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest004_1"),
762         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest004_1" };
763     int32_t ret = HKS_FAILURE;
764     /* 1. Generate Key */
765     struct HksParamSet *genParamSet = nullptr;
766     ret = InitParamSet(&genParamSet, g_genParams004, sizeof(g_genParams004)/sizeof(HksParam));
767     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
768 
769     /* 2. PBKDF2 Three Stage */
770     struct HksParamSet *pbkdf2ParamSet = nullptr;
771     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
772     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params004, sizeof(g_pbkdf2Params004)/sizeof(HksParam));
773     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
774     struct HksParam *saltParam = nullptr;
775     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
776     ret = HksGenerateRandom(NULL, &(saltParam->blob));
777     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
778     // Finish paramset
779     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams004,
780         sizeof(g_pbkdf2FinishParams004)/sizeof(HksParam));
781     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
782 
783     // init-update-final
784     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
785     /* 3. Delete Key */
786     ret = HksDeleteKey(&keyAlias, genParamSet);
787     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
788     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest004_2"),
789         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest004_2"};
790     ret = HksDeleteKey(&deleteKeyAlias, NULL);
791     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
792 
793     HksFreeParamSet(&genParamSet);
794     HksFreeParamSet(&pbkdf2ParamSet);
795     HksFreeParamSet(&pbkdf2FinishParamSet);
796 }
797 
798 /**
799  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive005
800  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
801  * @tc.type: FUNC
802  */
803 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive005, TestSize.Level0)
804 {
805     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest005_1"),
806         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest005_1" };
807     int32_t ret = HKS_FAILURE;
808     /* 1. Generate Key */
809     struct HksParamSet *genParamSet = nullptr;
810     ret = InitParamSet(&genParamSet, g_genParams005, sizeof(g_genParams005)/sizeof(HksParam));
811     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
812 
813     /* 2. PBKDF2 Three Stage */
814     struct HksParamSet *pbkdf2ParamSet = nullptr;
815     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
816     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params005, sizeof(g_pbkdf2Params005)/sizeof(HksParam));
817     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
818     struct HksParam *saltParam = nullptr;
819     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
820     ret = HksGenerateRandom(NULL, &(saltParam->blob));
821     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
822     // Finish paramset
823     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams005,
824         sizeof(g_pbkdf2FinishParams005)/sizeof(HksParam));
825     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
826 
827     // init-update-final
828     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
829     /* 3. Delete Key */
830     ret = HksDeleteKey(&keyAlias, genParamSet);
831     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
832     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest005_2"),
833         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest005_2"};
834     ret = HksDeleteKey(&deleteKeyAlias, NULL);
835     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
836 
837     HksFreeParamSet(&genParamSet);
838     HksFreeParamSet(&pbkdf2ParamSet);
839     HksFreeParamSet(&pbkdf2FinishParamSet);
840 }
841 
842 /**
843  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive006
844  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
845  * @tc.type: FUNC
846  */
847 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive006, TestSize.Level0)
848 {
849     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest006_1"),
850         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest006_1" };
851     int32_t ret = HKS_FAILURE;
852     /* 1. Generate Key */
853     struct HksParamSet *genParamSet = nullptr;
854     ret = InitParamSet(&genParamSet, g_genParams006, sizeof(g_genParams006)/sizeof(HksParam));
855     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
856 
857     /* 2. PBKDF2 Three Stage */
858     struct HksParamSet *pbkdf2ParamSet = nullptr;
859     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
860     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params006, sizeof(g_pbkdf2Params006)/sizeof(HksParam));
861     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
862     struct HksParam *saltParam = nullptr;
863     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
864     ret = HksGenerateRandom(NULL, &(saltParam->blob));
865     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
866     // Finish paramset
867     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams006,
868         sizeof(g_pbkdf2FinishParams006)/sizeof(HksParam));
869     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
870 
871     // init-update-final
872     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
873     /* 3. Delete Key */
874     ret = HksDeleteKey(&keyAlias, genParamSet);
875     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
876     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest006_2Finish"),
877         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest006_2Finish"};
878     ret = HksDeleteKey(&deleteKeyAlias, NULL);
879     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
880 
881     HksFreeParamSet(&genParamSet);
882     HksFreeParamSet(&pbkdf2ParamSet);
883     HksFreeParamSet(&pbkdf2FinishParamSet);
884 }
885 
886 /**
887  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive007
888  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
889  * @tc.type: FUNC
890  */
891 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive007, TestSize.Level0)
892 {
893     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest007_1"),
894         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest007_1" };
895     int32_t ret = HKS_FAILURE;
896     /* 1. Generate Key */
897     struct HksParamSet *genParamSet = nullptr;
898     ret = InitParamSet(&genParamSet, g_genParams007, sizeof(g_genParams007)/sizeof(HksParam));
899     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
900 
901     /* 2. PBKDF2 Three Stage */
902     struct HksParamSet *pbkdf2ParamSet = nullptr;
903     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
904     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params007, sizeof(g_pbkdf2Params007)/sizeof(HksParam));
905     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
906     struct HksParam *saltParam = nullptr;
907     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
908     ret = HksGenerateRandom(NULL, &(saltParam->blob));
909     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
910     // Finish paramset
911     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams007,
912         sizeof(g_pbkdf2FinishParams007)/sizeof(HksParam));
913     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
914 
915     // init-update-final
916     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
917     /* 3. Delete Key */
918     ret = HksDeleteKey(&keyAlias, genParamSet);
919     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
920     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest007_2Finish"),
921         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest007_2Finish"};
922     ret = HksDeleteKey(&deleteKeyAlias, NULL);
923     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
924 
925     HksFreeParamSet(&genParamSet);
926     HksFreeParamSet(&pbkdf2ParamSet);
927     HksFreeParamSet(&pbkdf2FinishParamSet);
928 }
929 
930 /**
931  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive008
932  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
933  * @tc.type: FUNC
934  */
935 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive008, TestSize.Level0)
936 {
937     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest008_1"),
938         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest008_1" };
939     int32_t ret = HKS_FAILURE;
940     /* 1. Generate Key */
941     struct HksParamSet *genParamSet = nullptr;
942     ret = InitParamSet(&genParamSet, g_genParams008, sizeof(g_genParams008)/sizeof(HksParam));
943     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
944 
945     /* 2. PBKDF2 Three Stage */
946     struct HksParamSet *pbkdf2ParamSet = nullptr;
947     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
948     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params008, sizeof(g_pbkdf2Params008)/sizeof(HksParam));
949     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
950     struct HksParam *saltParam = nullptr;
951     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
952     ret = HksGenerateRandom(NULL, &(saltParam->blob));
953     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
954     // Finish paramset
955     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams008,
956         sizeof(g_pbkdf2FinishParams008)/sizeof(HksParam));
957     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
958 
959     // init-update-final
960     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
961     /* 3. Delete Key */
962     ret = HksDeleteKey(&keyAlias, genParamSet);
963     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
964     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest008_2Finish"),
965         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest008_2Finish"};
966     ret = HksDeleteKey(&deleteKeyAlias, NULL);
967     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
968 
969     HksFreeParamSet(&genParamSet);
970     HksFreeParamSet(&pbkdf2ParamSet);
971     HksFreeParamSet(&pbkdf2FinishParamSet);
972 }
973 
974 /**
975  * @tc.name: HksPbkdf2DerivePart1Test.HksPbkdf2Derive009
976  * @tc.desc: alg-PBKDF2 pur-Derive dig-SHA256.
977  * @tc.type: FUNC
978  */
979 HWTEST_F(HksPbkdf2DerivePart1Test, HksPbkdf2Derive009, TestSize.Level0)
980 {
981     struct HksBlob keyAlias = { strlen("HksPBKDF2DeriveKeyAliasTest009_1"),
982         (uint8_t *)"HksPBKDF2DeriveKeyAliasTest009_1" };
983     int32_t ret = HKS_FAILURE;
984     /* 1. Generate Key */
985     struct HksParamSet *genParamSet = nullptr;
986     ret = InitParamSet(&genParamSet, g_genParams009, sizeof(g_genParams009)/sizeof(HksParam));
987     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
988 
989     /* 2. PBKDF2 Three Stage */
990     struct HksParamSet *pbkdf2ParamSet = nullptr;
991     struct HksParamSet *pbkdf2FinishParamSet = nullptr;
992     ret = InitParamSet(&pbkdf2ParamSet, g_pbkdf2Params009, sizeof(g_pbkdf2Params009)/sizeof(HksParam));
993     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
994     struct HksParam *saltParam = nullptr;
995     HksGetParam(pbkdf2ParamSet, HKS_TAG_SALT, &saltParam);
996     ret = HksGenerateRandom(NULL, &(saltParam->blob));
997     EXPECT_EQ(ret, HKS_SUCCESS) << "GenerateRandom failed.";
998     // Finish paramset
999     ret = InitParamSet(&pbkdf2FinishParamSet, g_pbkdf2FinishParams009,
1000         sizeof(g_pbkdf2FinishParams009)/sizeof(HksParam));
1001     EXPECT_EQ(ret, HKS_SUCCESS) << "InitParamSet failed.";
1002 
1003     // init-update-final
1004     HksPbkdf2DeriveTestNormalCase(keyAlias, genParamSet, pbkdf2ParamSet, pbkdf2FinishParamSet);
1005     /* 3. Delete Key */
1006     ret = HksDeleteKey(&keyAlias, genParamSet);
1007     EXPECT_EQ(ret, HKS_SUCCESS) << "DeleteKey failed.";
1008     struct HksBlob deleteKeyAlias = { .size = strlen("HksPBKDF2DeriveKeyAliasTest009_2Finish"),
1009         .data = (uint8_t *)"HksPBKDF2DeriveKeyAliasTest009_2Finish"};
1010     ret = HksDeleteKey(&deleteKeyAlias, NULL);
1011     EXPECT_EQ(ret, HKS_SUCCESS) << "Delete Final Key failed.";
1012 
1013     HksFreeParamSet(&genParamSet);
1014     HksFreeParamSet(&pbkdf2ParamSet);
1015     HksFreeParamSet(&pbkdf2FinishParamSet);
1016 }
1017 }