• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 <gtest/gtest.h>
17 #include <iostream>
18 
19 #include "hks_ability.h"
20 #include "hks_config.h"
21 #include "hks_crypto_hal.h"
22 #include "hks_crypto_hal_common.h"
23 #include "hks_mem.h"
24 
25 using namespace testing::ext;
26 namespace OHOS {
27 namespace Security {
28 namespace Huks {
29 namespace UnitTest {
30 namespace {
31 struct TestCaseParams {
32     HksUsageSpec usageSpec = {0};
33     std::string keyData;
34     std::string hexData;
35     HksKeySize keySize = HksKeySize::HKS_RSA_KEY_SIZE_512;
36 
37     HksErrorCode encryptResult = HksErrorCode::HKS_SUCCESS;
38 };
39 
40 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_001_PARAMS = {
41     .usageSpec = {
42         .algType = HKS_ALG_RSA,
43         .mode = HKS_MODE_ECB,
44         .padding = HKS_PADDING_NONE,
45         .digest = HKS_DIGEST_NONE,
46         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
47         .algParam = nullptr,
48     },
49     .keyData =
50         "0100000000020000400000004000000040000000ba5395c32972cdd04061fc45ac6d501555110a32300d44f57d6d7d9b478888361d815b"
51         "45c30aedce3674cf440c455552ba05ea9ef4659f37077c9498541f79d10000000000000000000000000000000000000000000000000000"
52         "0000000000000000000000000000000000000000000000000000000000000000000000010001355e09702ba801411b9fb514f3ad1f99ec"
53         "9283dc1a1d42da1981c9cf36eee92c3154e0b65cd6653c01a0568dec5f969bf6581ca2aa3c572138cfc9a0b2b3535d",
54     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff000000000000000000000000000"
55         "0000000000000000000000000000000000000",
56     .keySize = HKS_RSA_KEY_SIZE_512,
57 #if defined(_USE_OPENSSL_)
58     .encryptResult = HKS_SUCCESS,
59 #endif
60 #if defined(_USE_MBEDTLS_)
61     .encryptResult = HKS_ERROR_NOT_SUPPORTED,
62 #endif
63 };
64 
65 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_002_PARAMS = {
66     .usageSpec = {
67         .algType = HKS_ALG_RSA,
68         .mode = HKS_MODE_ECB,
69         .padding = HKS_PADDING_NONE,
70         .digest = HKS_DIGEST_NONE,
71         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
72         .algParam = nullptr,
73     },
74     .keyData =
75         "0100000000030000600000006000000060000000eadcc37762c4a0c4cd358de290f2efedf39503a1833e4082aef44cb564ff47d4feaee5"
76         "f145b3711cd9abf944e0586bc083dd2c7dde4fc8f7d9a69d4fc5a8aef527c82d02fd30eb33a1791db30011733d60ef3110bd769f385f10"
77         "b071ae552dbd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
78         "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001158f2e62472ec593"
79         "4b431f432d0b1ffb37e0f5f45d97d95425bb474f5f760fa1fdbf105c95896358c2a286bf4bd8d20b2d0b0880ff0193bcf0e625a9dbe330"
80         "6ea4534c0d7e83b657684194501574a554f76cbe29ce5953e1d92b479b4d1f8201",
81     .hexData =
82         "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0000000000000000000000000000000000000000000000"
83         "0000000000000000000000000000000000000000000000000000000000000000000000000000000000",
84     .keySize = HKS_RSA_KEY_SIZE_768,
85 #if defined(_USE_OPENSSL_)
86     .encryptResult = HKS_SUCCESS,
87 #endif
88 #if defined(_USE_MBEDTLS_)
89     .encryptResult = HKS_ERROR_NOT_SUPPORTED,
90 #endif
91 };
92 
93 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_003_PARAMS = {
94     .usageSpec = {
95         .algType = HKS_ALG_RSA,
96         .mode = HKS_MODE_ECB,
97         .padding = HKS_PADDING_NONE,
98         .digest = HKS_DIGEST_NONE,
99         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
100         .algParam = nullptr,
101     },
102     .keyData =
103         "0100000000040000800000008000000080000000a51514cb129c6e19e50eaf764e08067e5720ba300a9031a5a40509d210b0e5a072b7dc"
104         "6e0b9da82b59bb5c41b0baabbd4b534eb6a8fd50c25a7d9b7b1c7d9e808c5de65a0658fbb353b635dce78ab6d09478257b7e8b5b508cd7"
105         "5a735ca3944aba2bc8f443cd9ed6b0096cfda268e2fda1462182b313b25f27ecdc4510fc87770000000000000000000000000000000000"
106         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
107         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100"
108         "016671c4ab98eb16b05f2353e3d8dcc61ad53aec10301df791514e0720235783c8a4285154c1449f3df7bb7baf105b67845b2061b29d00"
109         "4683b5e049028755b56c15879f4b5dc76e57fd0296c1286b347f7387b2f9e8cee0fbd6cf034cd16dffa6cc2f5c1101c1f430c265ea0d5b"
110         "c27a01672405d4f670baf194ccb4ba87a3c5b1",
111     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff000000000000000000000000000"
112         "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
113         "00000000000000000000000000000000000000000000000000000000000000000000000000",
114     .keySize = HKS_RSA_KEY_SIZE_1024,
115 #if defined(_USE_OPENSSL_)
116     .encryptResult = HKS_SUCCESS,
117 #endif
118 #if defined(_USE_MBEDTLS_)
119     .encryptResult = HKS_ERROR_NOT_SUPPORTED,
120 #endif
121 };
122 
123 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_004_PARAMS = {
124     .usageSpec = {
125         .algType = HKS_ALG_RSA,
126         .mode = HKS_MODE_ECB,
127         .padding = HKS_PADDING_NONE,
128         .digest = HKS_DIGEST_NONE,
129         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
130         .algParam = nullptr,
131     },
132     .keyData =
133         "0100000000080000000100000001000000010000a0286e22fea334e1ec2f48a955d91d44992e2fda06d23ff00bbfdd70f0f961bed02781"
134         "e345ad866f63c217ae82f84db6f3ef2d5937fe9684f2c1e1ac091e81eb7dc1da7bb4a2ad7e3bb2911cfbfa8c0244527b91259b5b7ac1e4"
135         "32701ac4e5c87186b59340ae0b67e4d2805ad01431121d907181aaac1d7a26e4703b1812c711fa3d056a8f4709a923193895f2657e66b0"
136         "b109dbc65c9703bc08d79696f35f63e790aff9cf4323320288d5bc9360f08dc9576d7cba0792bc56864a844b72c49041340b8b3487dba1"
137         "f724bac429e7d40c99d752d4be9cca352b59a7594ddae02784c3b8e137f141e2a77e098524aec3b96d989fe09e28578fabeb6e6976bba3"
138         "77000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
139         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
140         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
141         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
142         "000000000000000000000000000000000000000000000000000000000000000000000100010490024b36ebd956d24eaa88406cd5fb9d4d"
143         "868974864ad200d3af70473d237eb7195906eb763d0d314f57335e81ca5cfae80667b343aa7011265ad276d40aa975c4aeffb52ea9389e"
144         "64c0e38d7e1ebcf5cb4fbfdbcd6836c00d4b2e8c64ad931f40d22d66bb4e91e01feb0e2b3d580487191552b754fde5fbf3a80ad6edba04"
145         "0a8d0c30fa413ce7cb7d1bdd5960cb6d9c68285cf7ca8abde4c2a5aa2f7ef875e66094b9a263e529f38651f405ee9410ae45f3f272effb"
146         "d318c23eb112bb295b79cfff9f5df4ed2a91c590c03fdb304e74dd7758916b91e4716a6b4f5703516aaad8a8cb9f2b603f11ac90b0e941"
147         "ffdf7059c7ba1a74c5bf6435a8040f175ae1",
148     .hexData =
149         "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0000000000000000000000000000000000000000000000"
150         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
151         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
152         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
153         "000000000000000000000000000000000000000000000000000000000000000000000000",
154     .keySize = HKS_RSA_KEY_SIZE_2048,
155 #if defined(_USE_OPENSSL_)
156     .encryptResult = HKS_SUCCESS,
157 #endif
158 #if defined(_USE_MBEDTLS_)
159     .encryptResult = HKS_ERROR_NOT_SUPPORTED,
160 #endif
161 };
162 
163 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_005_PARAMS = {
164     .usageSpec = {
165         .algType = HKS_ALG_RSA,
166         .mode = HKS_MODE_ECB,
167         .padding = HKS_PADDING_NONE,
168         .digest = HKS_DIGEST_NONE,
169         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
170         .algParam = nullptr,
171     },
172     .keyData =
173         "01000000000c0000800100008001000080010000b3c325e9339d6cc17db61da704dc05364320f4ca208467ddbf3d44a625a5dc3a6cd134"
174         "27cce14a3f0a2f7a50a6e377b52f73bb824254d8bed785b91303f30211c20d1bef9ddd5e4ee88b7425ef2846f41e791d5a9670682553be"
175         "ce2dbf41d88abbfde7dc3f450572290daabb55a1a56b28b282de9576249de95d0075d47914943f52d9a559ddcec9b5f610eeee9bf10cd3"
176         "d807d00abdf94e7f63a50d01ddb8cff95e0452e56e614115031fe5ddb91d46c13358c1f42685fc19e09a2cf3170fa0bf0e0a380400fc8c"
177         "c3e2f287c68d48ae04ecd3448273198744f37187eee774cc2dcc28fd3b037af7f4c54e30dd254c12b6f482c32e2de7014fb48f5badfea3"
178         "91531b6a58c1c95f84ded943cc8fe113ff21e3c5f5625d88c77ee24ecad6b22e0013831af764c2a87c7db71062b922c136402a102391c4"
179         "911bb286e8d96efa8e1c629d8818fd02de45bcdb8352cf16af7f282e5676a4b07c74a7e52b94726963fb79f433991114415474f90b10e3"
180         "fea5d24043ce964298a938aa79014ae98da4b3000000000000000000000000000000000000000000000000000000000000000000000000"
181         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
182         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
183         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
184         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
185         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
186         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
187         "000000000000000000000000000000010001546d4714ebc4f81b382b9c69a102a500032f2b48f354bc638d39fd4ffb4696d469df279bb9"
188         "c1e5d90db396c2e25edb0e21a73d5dc4418d3ab4867d91ccbd092fc5efda3b03edc029575687ca7934757e9a015024079beb8dfc7314ea"
189         "af75017ac7284d09483de67ce38323b8b0532719d9175e17a422c4b7d5ae7454e2e1ab24a54908277cb98c317860853b729d92ecef61fa"
190         "e95ee23281079b891d3ecf1fc9add8d63708c27ab2d2679147a8871494f290671350d3f7019c35bcb377c850f1e87dcc174873ecd98d0c"
191         "f6ed9dd83118142d9f9cef1301b221a047440609ac3be88bf69e8e50843f75c855f974dc00e18168c8000a9a4ca65247560a5187ffed04"
192         "4eb4da9e4e517870ab2dcbf6574c63676f8a3620852940c6b185186d21a53bdb20e7bf7d16288a3d9e0d47844d2b605f8ba879e87ce348"
193         "033667577d6c91645f30f2720e9f9229ccc7a270215b124677650e94e5c181cdac04e2b2dfb8c3165f3a4a556c78684f60e602fb79f911"
194         "68a938c5f0c4254265ae72f54938268021",
195     .hexData =
196         "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0000000000000000000000000000000000000000000000"
197         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
198         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
199         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
200         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
201         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
202         "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
203     .keySize = HKS_RSA_KEY_SIZE_3072,
204 #if defined(_USE_OPENSSL_)
205     .encryptResult = HKS_SUCCESS,
206 #endif
207 #if defined(_USE_MBEDTLS_)
208     .encryptResult = HKS_ERROR_NOT_SUPPORTED,
209 #endif
210 };
211 
212 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_006_PARAMS = {
213     .usageSpec = {
214         .algType = HKS_ALG_RSA,
215         .mode = HKS_MODE_ECB,
216         .padding = HKS_PADDING_NONE,
217         .digest = HKS_DIGEST_NONE,
218         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
219         .algParam = nullptr,
220     },
221     .keyData =
222         "0100000000100000000200000002000000020000e5a087382ce37175f66f6e4ebc00c0cb7d9b0486425eed1bf831cb43566031894221a1"
223         "f1b0c7275318d82b186640256c3f1325f32a740e2c9ab3f7ca866d02b982f9caaa59eb49d7e3268f6b902e589ec65c91164d1e370ec407"
224         "b06f9687b059835574ce9a541607b08e18a33fc74ec9ae0bb7e2a3c1fd73eeffb493e2e939b9ab7501dd0692ac63d262cb4130fae6be54"
225         "42964a80f3e7474c0fee48dce2940e7fae7a8a8aec30a8d71dab54b1d42b1a364fc60a837f2533ca79dec02796cc00202db34dfb674641"
226         "d20aa00c1d748aae18f5219ff5232a479e4e61a653c54b84ec1fbbd16624d595af1bb831508af96f02494312e46bcccca9e8c6f471c082"
227         "c7a2e742a239cb908279b63f29385d53172ece4a85272acca9e52b9599c244a6ee786b7ddb599c198362bd5697c522f667457c11503286"
228         "4e4364325873652f9e69b27aae8b1c8c385164c8edcdf401dc306ade1907449bd1c58593681b5f8e8cb536c9e60390152ce648ada0f091"
229         "d3b11ca660f44421257434b69f4f60a6159cb86c8911559319e765550d142d58e844896259f0e8eb471a2150a79221c31d0b2032b3d716"
230         "b3c00255eb300fbb2fba4bec0d4041d7b010939fd339e8080d52c7ded936af229358a580ac87518bbd785fb103534b9ad3f19501125b5a"
231         "9467d4b76e5e571d2b1393454e92711be52d1f9482f7997f4e65102995874febc087792b77000000000000000000000000000000000000"
232         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
233         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
234         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
235         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
236         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
237         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
238         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
239         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
240         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000198"
241         "f34d3e40c01ac22d2cd9f7bdc86ea2dc7e560c2bc758fe695a997eb7d90905d933d7cfca254d6f4f3c25b071e3464a0cd56f50c2355d7f"
242         "9e6843a3f5d8449956c19599d49d21a9985705eeeab1c43bb5fad0755f56c1eba6ed4c3b77b3d7e637d1c3251eace5a3a7996e95c694b6"
243         "4926120e20fb5ceababf36398ccbf6f78951c8753e48f387ba51d796754cefc2a482317c341222e4299c637c1fb269859f06b32c527de8"
244         "871cdf7496bbaa5b9d7e2f3101c3dd04e2bdd59f499d0a81aa4e6720a9af46c6ea884b24e2a84f3262714694791a37c97d8f08c642caec"
245         "3f9d66e374dbc0c5ddc11a9bf1c5c5ab557681d7aefeeb6594dc6c72bc67514937a6a399d80094486382538c330569a3a944375751d9eb"
246         "ed82c39bf81cf27f88c211070960d781719fb64d3c7a507c955e015cd3c4e968fea4d999d57245b30bcffae2c44ab6bfe4d2c3d7457a68"
247         "3f0580cdc0d4910e071ef624888db604f110eb6aa2a454cd9b74d4b9b857994452c092c20df2a0110ed81c8275aa745971e900c9485f67"
248         "82fbf666215762f2f971e4d213be05cb1760e4c7bfc3fb17ae1409039568ba3d9e2d34e282cc43c9db4ed8286a0a504022cbd23cd68cc7"
249         "94685dd6daddf1054673cb9b517495e0c39569e0627e4b8ef80bb196f58f53627af0a4142fb2b469cc767a348ce74ea8dbdc647386e485"
250         "62a124488021988f9d71ff68f2028a19",
251     .hexData =
252         "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0000000000000000000000000000000000000000000000"
253         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
254         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
255         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
256         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
257         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
258         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
259         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
260         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
261         "0000000000000000000000000000000000",
262     .keySize = HKS_RSA_KEY_SIZE_4096,
263 
264 #if defined(_USE_OPENSSL_)
265     .encryptResult = HKS_SUCCESS,
266 #endif
267 #if defined(_USE_MBEDTLS_)
268     .encryptResult = HKS_ERROR_NOT_SUPPORTED,
269 #endif
270 };
271 
272 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_007_PARAMS = {
273     .usageSpec = {
274         .algType = HKS_ALG_RSA,
275         .mode = HKS_MODE_ECB,
276         .padding = HKS_PADDING_PKCS1_V1_5,
277         .digest = HKS_DIGEST_NONE,
278         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
279         .algParam = nullptr,
280     },
281     .keyData =
282         "0100000000020000400000004000000040000000a6a29490a5a6b309192f7571daa7cacce05dc5a5af6e4c0648ffc3dd72704651c806ee"
283         "0cb61afc2f118bb24075a2f303cc548bfd9fea2c3dc945d5d976457ae10000000000000000000000000000000000000000000000000000"
284         "00000000000000000000000000000000000000000000000000000000000000000000000100012a295cb9b4901720a834afdc9cdc739d9e"
285         "ef5b00ef0053500bcc5afc7ee6158457279c58942bafa28d436be509cd30b841e40cb769efffe8723b70c6f464f599",
286     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
287     .keySize = HKS_RSA_KEY_SIZE_512,
288 
289     .encryptResult = HKS_SUCCESS,
290 };
291 
292 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_008_PARAMS = {
293     .usageSpec = {
294         .algType = HKS_ALG_RSA,
295         .mode = HKS_MODE_ECB,
296         .padding = HKS_PADDING_PKCS1_V1_5,
297         .digest = HKS_DIGEST_NONE,
298         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
299         .algParam = nullptr,
300     },
301     .keyData =
302         "0100000000030000600000006000000060000000d056e8b387700c781feb01097ecd9868c32af0cea33292634b2b0027117b75af0ebdb9"
303         "6172c776ef95bb7c3dcfa6126858e6fe69c87e0ed69dcf81e15ebef50f03fbaffaee527c291f3740e521730271eb3b63f4057cba780c6a"
304         "c8520816d79300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
305         "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001acbf7361f12a5a5c"
306         "7c72bac069d105cfd00c59f1ace630f57e0d60aa0457ef63c10055a754a9c997acfaf170bb2dc3d21b8e26541ba01ff0b99788b13a553b"
307         "f97c8c71cd149dcb421fb96affc55a6588adb642251bd991ef7d54890950e5b719",
308     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
309     .keySize = HKS_RSA_KEY_SIZE_768,
310 
311     .encryptResult = HKS_SUCCESS,
312 };
313 
314 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_009_PARAMS = {
315     .usageSpec = {
316         .algType = HKS_ALG_RSA,
317         .mode = HKS_MODE_ECB,
318         .padding = HKS_PADDING_PKCS1_V1_5,
319         .digest = HKS_DIGEST_NONE,
320         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
321         .algParam = nullptr,
322     },
323     .keyData =
324         "0100000000040000800000008000000080000000bc294482ddb7abe39a04a31b8410e9115691e8cdedc7aa060a63977d55a6f924f8387d"
325         "93bba101ad7351ad244baf25d19a840dc975409801fe634a603cce8fec3f2c40db3d2b6f0053e4ae0c073f5d21c9632e4d3a61f4afac89"
326         "5367e58eb6fc9a723e75f14a8dcd7dd210644427d9d26da3cb88aa085e9d3fb74bdeb16d4d250000000000000000000000000000000000"
327         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
328         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100"
329         "014fc97801be1eba46a2f2c06f548b0f2988fa0a2bf85e281cb39f1387d4201f99ab9fd8b02269dd9a3d422f172af8b422b350b7bfeb76"
330         "5e7ec9ee3485a68338c78cc6cd9ceb514aa6b7cce5811306d6d256b3a1d6f6e1a2c309b0d721a0a32566c8e030794c90d984af31685a99"
331         "70960dc0698a51f3e03211fa43b3a4f9336141",
332     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
333     .keySize = HKS_RSA_KEY_SIZE_1024,
334 
335     .encryptResult = HKS_SUCCESS,
336 };
337 
338 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_010_PARAMS = {
339     .usageSpec = {
340         .algType = HKS_ALG_RSA,
341         .mode = HKS_MODE_ECB,
342         .padding = HKS_PADDING_PKCS1_V1_5,
343         .digest = HKS_DIGEST_NONE,
344         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
345         .algParam = nullptr,
346     },
347     .keyData =
348         "0100000000080000000100000001000000010000ddf3e9c6589658e5c124a49d473db529e8eb08b99c351cf7c5d502f64def9752d4ee88"
349         "d942cbdbc7fb46eac9d9b9f9b309fbffa99c9fe05363b2d5e71c2d132bc83d74f0b8441266fc2f6f0462b54fa0ffaef92bb93cec2d1805"
350         "9db40ff9d579f7980c08cb9a30d076d6ebf50f4166514bd00cdf20ca042ddf13581feddd32b15e8508f2b185f4e6c77217c5096a9dfecd"
351         "5132ee4ce41bccd3faa75abcf1014e5e27328d3a1b08e56c33d5f5f2fe8b8f232db6953a337bca29e2726165732c8d1aae10a6e9c60ce5"
352         "4b2423868e6d024dfdfab45fbb3d589d06fb8f55564bdc2bb07c1c84cf8c076045706b36e6715c4dc8cd1f4fe751de77b031b5bcf7cde7"
353         "41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
354         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
355         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
356         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
357         "0000000000000000000000000000000000000000000000000000000000000000000001000151ac53b5fd1b361335837a5fb5bb6b52c4b6"
358         "d83b14d42698b65faffb5aaa7390b37223416f66fcb5162dfe6fd082b2f3c314cbfb69fb1add14aed62f791acd172b54121812765a1f33"
359         "657100b821e7ef62a6cc61de842094676689a59ccb5e56c75957f45497a4a6d1543cf7ac69707131e89913f248e448ccf19d58027b870f"
360         "361c57bc60e75da62e75d94b7e42c544e7ef183fd1935f0ca8d637e18cc4acae0e99f8aabbf83c968460b5237eac3271f214fd10580166"
361         "c836e067948438f8a3c5edded4871baf6acab762e501db5fde6f2ec201072532c109d0a55cdf0e275322ccf326c9a2a6b235d5742067b6"
362         "f7912bf772c9039385ab0a81c0186bf91001",
363     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
364     .keySize = HKS_RSA_KEY_SIZE_2048,
365 
366     .encryptResult = HKS_SUCCESS,
367 };
368 
369 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_011_PARAMS = {
370     .usageSpec = {
371         .algType = HKS_ALG_RSA,
372         .mode = HKS_MODE_ECB,
373         .padding = HKS_PADDING_PKCS1_V1_5,
374         .digest = HKS_DIGEST_NONE,
375         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
376         .algParam = nullptr,
377     },
378     .keyData =
379         "01000000000c0000800100008001000080010000b6267a0a854bc91d6a7f469ea9212dc3fb2a5a2e6626ec1f41e3f6436361b0c8141bcc"
380         "77e3e568dfee0068e0c863681ba0383b22046e6ef166274cbe19893e8a0ad4fdf86475998b0b00af04ccb0d1e1b42f89a20f56dccbfe14"
381         "45e794a8123434a252eab9e386a35d663669d219b34ad92f7a64a90a91f25ffa002ccc589843fde8cb3111d566b4a665c51d801f290ceb"
382         "be980ae71fad125e851c426d240fa361414c34a037d2a0840a25e4af4355931a6efc7c9faf11a5e8d225387965ea51f81f910786b9dfa9"
383         "8459678db6a0670b14b64a2be05ebd2db0f25fcab225f719b5cd97a0f38c490d38a710d594d50ba75ab0ebc04456fe12514f96351cdc9a"
384         "8a868389c932b3572726ce2303ab1e7f85c43c18e52ae14efcad4e0f65bffbf3254e10ad616ce169594373dcf1d44016c4fd77023bb0a8"
385         "302ce72de9ce1aba9d885c05aefa935492592afaae543c8c99e997dff2c1125a3931f5897b5ce2c6217d69be0d74612dea66347c076c44"
386         "5849c786e36a0c285e0f3b838d630b3347a96b000000000000000000000000000000000000000000000000000000000000000000000000"
387         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
388         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
389         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
390         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
391         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
392         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
393         "0000000000000000000000000000000100013f242b5e0642f51e6b525f6a947a59e0fbe9fc84e5084d05b0d393045d28fa1d014b799f7d"
394         "b2829e4d647af6a0c044d07ec3bf4bd5796a9fe7a76be4e1f93f629ecaa2973e4bbdc40336637528778ae9d08a420d997fa4de59df3134"
395         "4bc5cf39a59d375d02bf2a66eaf3899d39258b8f40a642a92e27e9dbb905729614e80930588e20118c7b0b35481133393cb69086581a23"
396         "9e73ebf914cb0b1d76b15ab4c90fe790c1156104747c11007dbb7b7de8965b2ecf0c93a56c7bbe8d047ca0a58edaa75649497e7a4c1b69"
397         "90a9d6fda6dcbf9732d517a01a3818287c8717949fa4820d88f3a5918bc0d629d88ae63e1b9ba0a52bd8cefdf30e4b273e9ead163dad87"
398         "bafb456b7af8b8e5dc353eda84195190b994e447758f082c1d9700d83655f1956f1c75dd5cde9880169b7f7720cc39761411a3c98cb25d"
399         "ce939c5c1724c07f31a1bfb59771d06cee3c6057e04489ceec6a122866d67d19923c7c5cbf598e48ab4fede639807b9d3d6f83aa821411"
400         "94019bc2c4fd028ccca7dc4e56e657f931",
401     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
402     .keySize = HKS_RSA_KEY_SIZE_3072,
403 
404     .encryptResult = HKS_SUCCESS,
405 };
406 
407 const TestCaseParams HKS_CRYPTO_HAL_RSA_ENCRYPT_012_PARAMS = {
408     .usageSpec = {
409         .algType = HKS_ALG_RSA,
410         .mode = HKS_MODE_ECB,
411         .padding = HKS_PADDING_PKCS1_V1_5,
412         .digest = HKS_DIGEST_NONE,
413         .purpose = HKS_KEY_PURPOSE_ENCRYPT | HKS_KEY_PURPOSE_DECRYPT,
414         .algParam = nullptr,
415     },
416     .keyData =
417         "0100000000100000000200000002000000020000c214a594a87457faccdfa9e466160af3a292f93003783fa46feeae2d84c0c41704d01a"
418         "2eb9874b59fcd217d7394e01e20a9fd162ef4de6c87adc11d423bc13c1f2b609e73c5ff20251a7e9e940fdb2fed3e8d04a2dc5fd33708e"
419         "aeea6b85ea021487daa0d8cc52b1ee0299915a5dc5b469792908aa05bad12d4c1af13c5ab552849c480ac6bec9fd4256d2b2b8f4f48583"
420         "f471c8f9e3c099c170e4863f5935ae11475d45bf4a1c5022937c31cdb23379f3bdbbfc8f59cce6dff3b02f201f660640605c9cf9f489da"
421         "74d378f9a97cc1284662346fd78f621c7b36b15b60cc5d645b5217a5aaee9f4c5f0cd1a3ba6d4fcfc49e472951e300af124106f38fc10f"
422         "3e40812997b93c35e44e8267e5d88bb0fba1e941801ee360317d1b4be71e40332d2a44c8727f7ae36eefe83906b4bc44214f126882f03a"
423         "9856e08268784c39fa351a7a00fbe916c2279ca679d7fa39a386e7ad50a08511031a480ffb449928b8e6b729921671f882f85dffbea3b6"
424         "93c362c311cba5ab909f06c7e2e333d11ca9ed0a821f4029101788071471236bd7af5a6e84ee6f5b7010a35ecd4abc894db5e5283322e7"
425         "5ef6f539d8a1524f155a7d2da825f42b11b80358d806d28934ef73014e863eeca74156d4b1b066ae11a875b746164095ed815b10478a37"
426         "cae6fa96fe16e9833397270fd531f7c1a9cfae0caad254e3b659e37e3fa9a1dcf07b48e101000000000000000000000000000000000000"
427         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
428         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
429         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
430         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
431         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
432         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
433         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
434         "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
435         "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100012f"
436         "99f4cab34e65cdc3b60feb4f0695051098cfb971006b4b9f9080f3f51d7a7ad2d95fb29a1a8ee6b155ae37417cda856069b667779e39be"
437         "6e33cfc3a2481ce872e92720a9f4365d4f3dc9e745e373a580c017663a37d7546884f66dd49571c1b4db654a12227b1ddcec9251ce4235"
438         "9d7c49154164c22701eb04418f6d682a14e525979ddd052a718d75d213b7bd8cc3ba8b97e4dd357925bd063d6697deff85840366e31679"
439         "ccdbf2bf0db5016875abb19695a6ea59f221a64814ac5a4a99316b54b722614413139b97ca922179d1be5914f91b7d59538cfcc37b5898"
440         "3347acb7a138df8f3f1b9f15a9053a0d1d8677c517b508736723e1ccae5a501eb011569bd1d1dc71f75681c5871497a149bdd4c0cfe7ca"
441         "acca439faba11526aee5f280345555c81f09213e6d6699511cece3dcb1ef47694c3d2eada01653d565dd0f85a56b9bf35ed63f1dcffdec"
442         "73939a2bd962f67feb49aeca0395214d7d2430b6a9c43a93f49386ee99579a46ad9848138ca08c0c02c4036f538f41b708bd1ce3be00c6"
443         "4caff64bfbeafe65d19b245f3547b999d84163e51c200b91b762728e43d5eace6ebec90119be092ae6f131ea7b5d5901eda3b8cbca01f0"
444         "df7f98dc3aab37712c3b223d03510ce241cb81e5719fb8ee161a1346d8323397d2ab673695d5d08816f1c0fc61073eb33471d29d7ecdcd"
445         "083678709efd4b63e5f0a699ec19e949",
446     .hexData = "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
447     .keySize = HKS_RSA_KEY_SIZE_4096,
448 
449     .encryptResult = HKS_SUCCESS,
450 };
451 }  // namespace
452 
453 class HksCryptoHalRsaEncrypt : public HksCryptoHalCommon, public testing::Test {
454 public:
455     static void SetUpTestCase(void);
456     static void TearDownTestCase(void);
457     void SetUp();
458     void TearDown();
459 protected:
RunTestCase(const TestCaseParams & testCaseParams) const460     void RunTestCase(const TestCaseParams &testCaseParams) const
461     {
462         uint32_t keyLen = testCaseParams.keyData.length() / HKS_COUNT_OF_HALF;
463         HksBlob key = { .size = keyLen, .data = (uint8_t *)HksMalloc(keyLen) };
464         ASSERT_EQ(key.data == nullptr, false) << "key malloc failed.";
465         for (uint32_t ii = 0; ii < keyLen; ii++) {
466             key.data[ii] = ReadHex((const uint8_t *)&testCaseParams.keyData[HKS_COUNT_OF_HALF * ii]);
467         }
468 
469         uint32_t inLen = testCaseParams.hexData.length() / HKS_COUNT_OF_HALF;
470         uint32_t outLen = inLen;
471         if (testCaseParams.usageSpec.padding == HKS_PADDING_PKCS1_V1_5) {
472             outLen = HKS_KEY_BYTES(testCaseParams.keySize);
473         }
474 
475         HksBlob message = { .size = inLen, .data = (uint8_t *)HksMalloc(inLen) };
476         ASSERT_EQ(message.data == nullptr, false) << "message malloc failed.";
477         for (uint32_t ii = 0; ii < inLen; ii++) {
478             message.data[ii] = ReadHex((const uint8_t *)&testCaseParams.hexData[HKS_COUNT_OF_HALF * ii]);
479         }
480 
481         HksBlob cipherText = { .size = outLen, .data = (uint8_t *)HksMalloc(outLen + HKS_PADDING_SUPPLENMENT) };
482         ASSERT_EQ(cipherText.data == nullptr, false) << "cipherText malloc failed.";
483         HksBlob tagAead = { .size = 0, .data = nullptr };
484 
485         EXPECT_EQ(HksCryptoHalEncrypt(&key, &testCaseParams.usageSpec, &message, &cipherText, &tagAead),
486             testCaseParams.encryptResult);
487         HksFree(key.data);
488         HksFree(message.data);
489         HksFree(cipherText.data);
490     }
491 };
492 
SetUpTestCase(void)493 void HksCryptoHalRsaEncrypt::SetUpTestCase(void)
494 {
495 }
496 
TearDownTestCase(void)497 void HksCryptoHalRsaEncrypt::TearDownTestCase(void)
498 {
499 }
500 
SetUp()501 void HksCryptoHalRsaEncrypt::SetUp()
502 {
503     EXPECT_EQ(HksCryptoAbilityInit(), 0);
504 }
505 
TearDown()506 void HksCryptoHalRsaEncrypt::TearDown()
507 {
508 }
509 
510 /**
511  * @tc.number    : HksCryptoHalRsaEncrypt_001
512  * @tc.name      : HksCryptoHalRsaEncrypt_001
513  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-512-NOPADDING key.
514  */
515 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_001, Function | SmallTest | Level1)
516 {
517     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_001_PARAMS);
518 }
519 
520 /**
521  * @tc.number    : HksCryptoHalRsaEncrypt_002
522  * @tc.name      : HksCryptoHalRsaEncrypt_002
523  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-768-NOPADDING key.
524  */
525 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_002, Function | SmallTest | Level1)
526 {
527     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_002_PARAMS);
528 }
529 
530 /**
531  * @tc.number    : HksCryptoHalRsaEncrypt_003
532  * @tc.name      : HksCryptoHalRsaEncrypt_003
533  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-1024-NOPADDING key.
534  */
535 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_003, Function | SmallTest | Level1)
536 {
537     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_003_PARAMS);
538 }
539 
540 /**
541  * @tc.number    : HksCryptoHalRsaEncrypt_004
542  * @tc.name      : HksCryptoHalRsaEncrypt_004
543  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-2048-NOPADDING key.
544  */
545 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_004, Function | SmallTest | Level1)
546 {
547     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_004_PARAMS);
548 }
549 
550 #ifndef CUT_RSA_4096_TEST
551 /**
552  * @tc.number    : HksCryptoHalRsaEncrypt_005
553  * @tc.name      : HksCryptoHalRsaEncrypt_005
554  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-3072-NOPADDING key.
555  */
556 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_005, Function | SmallTest | Level1)
557 {
558     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_005_PARAMS);
559 }
560 
561 /**
562  * @tc.number    : HksCryptoHalRsaEncrypt_006
563  * @tc.name      : HksCryptoHalRsaEncrypt_006
564  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-4096-NOPADDING key.
565  */
566 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_006, Function | SmallTest | Level1)
567 {
568     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_006_PARAMS);
569 }
570 #endif
571 
572 /**
573  * @tc.number    : HksCryptoHalRsaEncrypt_007
574  * @tc.name      : HksCryptoHalRsaEncrypt_007
575  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-512-PKCS1Padding key.
576  */
577 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_007, Function | SmallTest | Level1)
578 {
579     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_007_PARAMS);
580 }
581 
582 /**
583  * @tc.number    : HksCryptoHalRsaEncrypt_008
584  * @tc.name      : HksCryptoHalRsaEncrypt_008
585  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-768-PKCS1Padding key.
586  */
587 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_008, Function | SmallTest | Level1)
588 {
589     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_008_PARAMS);
590 }
591 
592 /**
593  * @tc.number    : HksCryptoHalRsaEncrypt_009
594  * @tc.name      : HksCryptoHalRsaEncrypt_009
595  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-1024-PKCS1Padding key.
596  */
597 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_009, Function | SmallTest | Level1)
598 {
599     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_009_PARAMS);
600 }
601 
602 /**
603  * @tc.number    : HksCryptoHalRsaEncrypt_010
604  * @tc.name      : HksCryptoHalRsaEncrypt_010
605  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-2048-PKCS1Padding key.
606  */
607 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_010, Function | SmallTest | Level1)
608 {
609     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_010_PARAMS);
610 }
611 
612 #ifndef CUT_RSA_4096_TEST
613 /**
614  * @tc.number    : HksCryptoHalRsaEncrypt_011
615  * @tc.name      : HksCryptoHalRsaEncrypt_011
616  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-3072-PKCS1Padding key.
617  */
618 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_011, Function | SmallTest | Level1)
619 {
620     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_011_PARAMS);
621 }
622 
623 /**
624  * @tc.number    : HksCryptoHalRsaEncrypt_012
625  * @tc.name      : HksCryptoHalRsaEncrypt_012
626  * @tc.desc      : Using HksCryptoHalEncrypt Encrypt RSA-4096-PKCS1Padding key.
627  */
628 HWTEST_F(HksCryptoHalRsaEncrypt, HksCryptoHalRsaEncrypt_012, Function | SmallTest | Level1)
629 {
630     RunTestCase(HKS_CRYPTO_HAL_RSA_ENCRYPT_012_PARAMS);
631 }
632 #endif
633 }  // namespace UnitTest
634 }  // namespace Huks
635 }  // namespace Security
636 }  // namespace OHOS