2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Dariusz Michaluk (d.michaluk@samsumg.com)
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
21 * @author Dariusz Michaluk (d.michaluk@samsumg.com)
24 #include "dpl/test/test_runner.h"
29 #include <yaca_types.h>
30 #include <yaca_error.h>
32 #include "yaca-test-common.h"
33 #include "yaca-test-vector.h"
37 bool is_key_private(yaca_key_type_e key_type)
40 case YACA_KEY_TYPE_RSA_PRIV:
41 case YACA_KEY_TYPE_DSA_PRIV:
42 case YACA_KEY_TYPE_DH_PRIV:
43 case YACA_KEY_TYPE_EC_PRIV:
50 void key_gen_test(yaca_key_type_e expected_type, size_t expected_bits)
54 size_t mask = 0xFFFFFFFF;
56 if (expected_type == YACA_KEY_TYPE_DH_PRIV)
57 mask = YACA_INTERNAL_KEYLEN_DH_PRIME_MASK;
59 auto key_ptr = generate_key(expected_type, expected_bits);
61 YACA_SUCCESS(yaca_key_get_bit_length(key_ptr.get(), &bits));
62 YACA_ASSERT_MSG(bits == (expected_bits & mask),
63 "Expected key length: " << expected_bits << " got: " << bits);
65 YACA_SUCCESS(yaca_key_get_type(key_ptr.get(), &type));
66 YACA_ASSERT_MSG(type == expected_type,
67 "Expected key type: " << expected_type << " got: " << type);
69 bool do_params_test = false;
70 yaca_key_type_e params_type;
72 switch (expected_type) {
73 case YACA_KEY_TYPE_DSA_PRIV:
74 do_params_test = true;
75 params_type = YACA_KEY_TYPE_DSA_PARAMS;
77 case YACA_KEY_TYPE_DH_PRIV:
78 do_params_test = true;
79 params_type = YACA_KEY_TYPE_DH_PARAMS;
81 case YACA_KEY_TYPE_EC_PRIV:
82 do_params_test = true;
83 params_type = YACA_KEY_TYPE_EC_PARAMS;
90 auto key_params = generate_key(params_type, expected_bits);
92 YACA_SUCCESS(yaca_key_get_bit_length(key_params.get(), &bits));
93 YACA_ASSERT_MSG(bits == (expected_bits & mask),
94 "Expected key length: " << expected_bits << " got: " << bits);
96 YACA_SUCCESS(yaca_key_get_type(key_params.get(), &type));
97 YACA_ASSERT_MSG(type == params_type,
98 "Expected key type: " << params_type << " got: " << type);
100 auto key_prv = generate_key_from_parameters(key_params);
102 YACA_SUCCESS(yaca_key_get_bit_length(key_ptr.get(), &bits));
103 YACA_ASSERT_MSG(bits == (expected_bits & mask),
104 "Expected key length: " << expected_bits << " got: " << bits);
106 YACA_SUCCESS(yaca_key_get_type(key_ptr.get(), &type));
107 YACA_ASSERT_MSG(type == expected_type,
108 "Expected key type: " << expected_type << " got: " << type);
112 void key_gen_invalid_param(yaca_key_type_e key_type,
116 YACA_INVALID_PARAM(yaca_key_generate(key_type, key_bit_len, key));
118 YACA_ASSERT_MSG(key == nullptr || *key == YACA_KEY_NULL,
119 "Non-empty key returned from a function that failed");
122 void key_gen_from_params_invalid_param(yaca_key_h params,
125 YACA_INVALID_PARAM(yaca_key_generate_from_parameters(params, key));
127 YACA_ASSERT_MSG(key == nullptr || *key == YACA_KEY_NULL,
128 "Non-empty key returned from a function that failed");
131 void key_extract_public_invalid_param(yaca_key_h key,
134 YACA_INVALID_PARAM(yaca_key_extract_public(key, pub));
136 YACA_ASSERT_MSG(pub == nullptr || *pub == YACA_KEY_NULL,
137 "Non-empty key returned from a function that failed");
140 void key_extract_params_invalid_param(yaca_key_h key,
143 YACA_INVALID_PARAM(yaca_key_extract_parameters(key, params));
145 YACA_ASSERT_MSG(params == nullptr || *params == YACA_KEY_NULL,
146 "Non-empty key returned from a function that failed");
149 void import_key_wrong_password(yaca_key_type_e key_type,
150 const std::string &password,
154 yaca_key_h key = YACA_KEY_NULL;
155 std::string password_wrong = password + "!";
157 if (password.size() > 0) {
158 YACA_RESULT(YACA_ERROR_INVALID_PASSWORD,
159 yaca_key_import(key_type, "", data, data_len, &key));
161 YACA_ASSERT_MSG(key == YACA_KEY_NULL,
162 "Non-empty key returned from a function that failed");
164 YACA_RESULT(YACA_ERROR_INVALID_PASSWORD,
165 yaca_key_import(key_type, nullptr, data, data_len, &key));
167 YACA_ASSERT_MSG(key == YACA_KEY_NULL,
168 "Non-empty key returned from a function that failed");
171 YACA_RESULT(YACA_ERROR_INVALID_PASSWORD,
172 yaca_key_import(key_type, password_wrong.c_str(), data, data_len, &key));
174 YACA_ASSERT_MSG(key == YACA_KEY_NULL,
175 "Non-empty key returned from a function that failed");
178 void assert_keys_equal(const KeyPtr &key1,
181 yaca_key_format_e key_fmt = YACA_KEY_FORMAT_DEFAULT;
182 yaca_key_file_format_e key_file_fmt = static_cast<yaca_key_file_format_e>(-1); // fix clang
183 yaca_key_type_e key1_type;
184 yaca_key_type_e key2_type;
186 YACA_SUCCESS(yaca_key_get_type(key1.get(), &key1_type));
187 YACA_SUCCESS(yaca_key_get_type(key2.get(), &key2_type));
189 YACA_ASSERT_MSG(key1_type == key2_type, "Key types are not equal");
192 case YACA_KEY_TYPE_SYMMETRIC:
193 case YACA_KEY_TYPE_DES:
194 case YACA_KEY_TYPE_IV:
195 key_file_fmt = YACA_KEY_FILE_FORMAT_RAW;
197 case YACA_KEY_TYPE_RSA_PUB:
198 case YACA_KEY_TYPE_RSA_PRIV:
199 case YACA_KEY_TYPE_DSA_PUB:
200 case YACA_KEY_TYPE_DSA_PRIV:
201 case YACA_KEY_TYPE_DSA_PARAMS:
202 case YACA_KEY_TYPE_DH_PUB:
203 case YACA_KEY_TYPE_DH_PRIV:
204 case YACA_KEY_TYPE_DH_PARAMS:
205 case YACA_KEY_TYPE_EC_PUB:
206 case YACA_KEY_TYPE_EC_PRIV:
207 case YACA_KEY_TYPE_EC_PARAMS:
208 key_file_fmt = YACA_KEY_FILE_FORMAT_DER;
211 RUNNER_FAIL_MSG("Wrong key_type passed");
215 ChrPtr key1_data = export_key(key1, key_fmt, key_file_fmt, nullptr, &key1_len);
218 ChrPtr key2_data = export_key(key2, key_fmt, key_file_fmt, nullptr, &key2_len);
220 YACA_ASSERT_MSG(key1_len == key2_len, "Compared keys are not of equal length");
221 YACA_SUCCESS(yaca_memcmp(key1_data.get(), key2_data.get(), key1_len));
224 } // anonymous namespace
226 RUNNER_TEST_GROUP_INIT(T4000_YACA_KEY);
229 RUNNER_TEST(T4006_yaca_key_destroy, YacaTest)
231 yaca_key_destroy(YACA_KEY_NULL);
234 YACA_SUCCESS(yaca_key_generate(YACA_KEY_TYPE_DES, YACA_KEY_LENGTH_192BIT, &key));
236 yaca_key_destroy(key);
239 RUNNER_TEST(T4010_yaca_key_invalid_param, YacaTest)
241 yaca_key_h out = YACA_KEY_NULL;
243 key_gen_invalid_param(static_cast<yaca_key_type_e>(-1), YACA_KEY_LENGTH_256BIT, &out);
244 key_gen_from_params_invalid_param(nullptr, &out);
245 key_extract_public_invalid_param(nullptr, &out);
246 key_extract_params_invalid_param(nullptr, &out);
249 RUNNER_TEST(T4020_yaca_key_symmetric_invalid_param, YacaTest)
251 yaca_key_h out = YACA_KEY_NULL;
253 key_gen_invalid_param(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT, nullptr);
254 key_gen_invalid_param(YACA_KEY_TYPE_SYMMETRIC, 0, &out);
255 key_gen_invalid_param(YACA_KEY_TYPE_SYMMETRIC, 1, &out);
256 key_gen_invalid_param(YACA_KEY_TYPE_SYMMETRIC, 69, &out);
259 RUNNER_TEST(T4030_yaca_key_iv_invalid_param, YacaTest)
261 yaca_key_h out = YACA_KEY_NULL;
263 key_gen_invalid_param(YACA_KEY_TYPE_IV, YACA_KEY_LENGTH_256BIT, nullptr);
264 key_gen_invalid_param(YACA_KEY_TYPE_IV, 0, &out);
265 key_gen_invalid_param(YACA_KEY_TYPE_IV, 1, &out);
266 key_gen_invalid_param(YACA_KEY_TYPE_IV, 69, &out);
269 RUNNER_TEST(T4040_yaca_key_des_invalid_param, YacaTest)
271 yaca_key_h out = YACA_KEY_NULL;
273 key_gen_invalid_param(YACA_KEY_TYPE_DES, YACA_KEY_LENGTH_192BIT, nullptr);
274 key_gen_invalid_param(YACA_KEY_TYPE_DES, 0, &out);
275 key_gen_invalid_param(YACA_KEY_TYPE_DES, 1, &out);
276 key_gen_invalid_param(YACA_KEY_TYPE_DES, 69, &out);
277 key_gen_invalid_param(YACA_KEY_TYPE_DES, 72, &out);
278 key_gen_invalid_param(YACA_KEY_TYPE_DES, YACA_KEY_LENGTH_256BIT, &out);
281 RUNNER_TEST(T4050_yaca_key_rsa_invalid_param, YacaTest)
283 yaca_key_h out = YACA_KEY_NULL;
284 KeyPtr priv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
285 KeyPtr pub = extract_public_key(priv);
287 key_gen_invalid_param(YACA_KEY_TYPE_RSA_PUB, YACA_KEY_LENGTH_1024BIT, &out);
288 key_gen_invalid_param(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT, nullptr);
289 key_gen_invalid_param(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_UNSAFE_128BIT, &out);
290 key_gen_invalid_param(YACA_KEY_TYPE_RSA_PRIV, 1023, &out);
291 key_gen_invalid_param(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1, &out);
292 key_gen_invalid_param(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256, &out);
294 key_gen_from_params_invalid_param(priv.get(), &out);
295 key_gen_from_params_invalid_param(pub.get(), &out);
297 key_extract_public_invalid_param(priv.get(), nullptr);
298 key_extract_public_invalid_param(pub.get(), &out);
300 key_extract_params_invalid_param(priv.get(), &out);
301 key_extract_params_invalid_param(pub.get(), &out);
304 RUNNER_TEST(T4060_yaca_key_dsa_invalid_param, YacaTest)
306 yaca_key_h out = YACA_KEY_NULL;
307 KeyPtr priv = generate_key(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_512BIT);
308 KeyPtr pub = extract_public_key(priv);
309 KeyPtr params = extract_parameters(priv);
311 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PUB, YACA_KEY_LENGTH_1024BIT, &out);
312 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT, nullptr);
313 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PARAMS, YACA_KEY_LENGTH_1024BIT, nullptr);
314 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_UNSAFE_128BIT, &out);
315 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PARAMS, YACA_KEY_LENGTH_UNSAFE_128BIT, &out);
316 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PRIV, 1016, &out);
317 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PARAMS, 1016, &out);
318 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PRIV, 1023, &out);
319 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PARAMS, 1023, &out);
320 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_256BIT, &out);
321 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PARAMS, YACA_KEY_LENGTH_256BIT, &out);
322 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1, &out);
323 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PARAMS, YACA_KEY_LENGTH_EC_PRIME256V1, &out);
324 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256, &out);
325 key_gen_invalid_param(YACA_KEY_TYPE_DSA_PARAMS, YACA_KEY_LENGTH_DH_RFC_2048_256, &out);
327 key_gen_from_params_invalid_param(params.get(), nullptr);
328 key_gen_from_params_invalid_param(priv.get(), &out);
329 key_gen_from_params_invalid_param(pub.get(), &out);
331 key_extract_public_invalid_param(priv.get(), nullptr);
332 key_extract_public_invalid_param(pub.get(), &out);
334 key_extract_params_invalid_param(priv.get(), nullptr);
335 key_extract_params_invalid_param(params.get(), &out);
338 RUNNER_TEST(T4065_yaca_key_dh_invalid_param, YacaTest)
340 yaca_key_h out = YACA_KEY_NULL;
341 KeyPtr priv = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
342 KeyPtr pub = extract_public_key(priv);
343 KeyPtr params = extract_parameters(priv);
345 key_gen_invalid_param(YACA_KEY_TYPE_DH_PUB, YACA_KEY_LENGTH_DH_RFC_2048_256, &out);
346 key_gen_invalid_param(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256, nullptr);
347 key_gen_invalid_param(YACA_KEY_TYPE_DH_PARAMS, YACA_KEY_LENGTH_DH_RFC_2048_256, nullptr);
348 key_gen_invalid_param(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_512BIT, &out);
349 key_gen_invalid_param(YACA_KEY_TYPE_DH_PARAMS, YACA_KEY_LENGTH_512BIT, &out);
350 key_gen_invalid_param(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1, &out);
351 key_gen_invalid_param(YACA_KEY_TYPE_DH_PARAMS, YACA_KEY_LENGTH_EC_PRIME256V1, &out);
353 key_gen_from_params_invalid_param(params.get(), nullptr);
354 key_gen_from_params_invalid_param(priv.get(), &out);
355 key_gen_from_params_invalid_param(pub.get(), &out);
357 key_extract_public_invalid_param(priv.get(), nullptr);
358 key_extract_public_invalid_param(pub.get(), &out);
360 key_extract_params_invalid_param(priv.get(), nullptr);
361 key_extract_params_invalid_param(params.get(), &out);
364 RUNNER_TEST(T4070_yaca_key_ec_invalid_param, YacaTest)
366 yaca_key_h out = YACA_KEY_NULL;
367 KeyPtr priv = generate_key(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1);
368 KeyPtr pub = extract_public_key(priv);
369 KeyPtr params = extract_parameters(priv);
371 key_gen_invalid_param(YACA_KEY_TYPE_EC_PUB, YACA_KEY_LENGTH_EC_PRIME256V1, &out);
372 key_gen_invalid_param(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1, nullptr);
373 key_gen_invalid_param(YACA_KEY_TYPE_EC_PARAMS, YACA_KEY_LENGTH_EC_PRIME256V1, nullptr);
374 key_gen_invalid_param(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_512BIT, &out);
375 key_gen_invalid_param(YACA_KEY_TYPE_EC_PARAMS, YACA_KEY_LENGTH_512BIT, &out);
376 key_gen_invalid_param(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256, &out);
377 key_gen_invalid_param(YACA_KEY_TYPE_EC_PARAMS, YACA_KEY_LENGTH_DH_RFC_2048_256, &out);
379 key_gen_from_params_invalid_param(params.get(), nullptr);
380 key_gen_from_params_invalid_param(priv.get(), &out);
381 key_gen_from_params_invalid_param(pub.get(), &out);
383 key_extract_public_invalid_param(priv.get(), nullptr);
384 key_extract_public_invalid_param(pub.get(), &out);
386 key_extract_params_invalid_param(priv.get(), nullptr);
387 key_extract_params_invalid_param(params.get(), &out);
390 RUNNER_TEST(T4080_yaca_key_generate_symmetric, YacaTest)
392 key_gen_test(YACA_KEY_TYPE_SYMMETRIC, 8);
393 key_gen_test(YACA_KEY_TYPE_SYMMETRIC, 72);
394 key_gen_test(YACA_KEY_TYPE_SYMMETRIC, 24);
395 key_gen_test(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_512BIT);
396 key_gen_test(YACA_KEY_TYPE_SYMMETRIC, 1016);
397 key_gen_test(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_4096BIT);
398 key_gen_test(YACA_KEY_TYPE_SYMMETRIC, 8192);
401 RUNNER_TEST(T4090_yaca_key_generate_iv, YacaTest)
403 key_gen_test(YACA_KEY_TYPE_IV, 8);
404 key_gen_test(YACA_KEY_TYPE_IV, 72);
405 key_gen_test(YACA_KEY_TYPE_IV, 24);
406 key_gen_test(YACA_KEY_TYPE_IV, YACA_KEY_LENGTH_512BIT);
407 key_gen_test(YACA_KEY_TYPE_IV, 1016);
408 key_gen_test(YACA_KEY_TYPE_IV, YACA_KEY_LENGTH_4096BIT);
409 key_gen_test(YACA_KEY_TYPE_IV, 8192);
412 RUNNER_TEST(T4100_yaca_key_generate_des, YacaTest)
414 key_gen_test(YACA_KEY_TYPE_DES, YACA_KEY_LENGTH_UNSAFE_64BIT);
415 key_gen_test(YACA_KEY_TYPE_DES, YACA_KEY_LENGTH_UNSAFE_128BIT);
416 key_gen_test(YACA_KEY_TYPE_DES, YACA_KEY_LENGTH_192BIT);
419 RUNNER_TEST(T4110_yaca_key_generate_rsa, YacaTest)
421 key_gen_test(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_256BIT);
422 key_gen_test(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
423 key_gen_test(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
424 key_gen_test(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_2048BIT);
425 key_gen_test(YACA_KEY_TYPE_RSA_PRIV, 1016);
428 RUNNER_TEST(T4120_yaca_key_generate_dsa, YacaTest)
430 key_gen_test(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_512BIT);
431 key_gen_test(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT);
432 key_gen_test(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_2048BIT);
433 key_gen_test(YACA_KEY_TYPE_DSA_PRIV, 1088);
436 RUNNER_TEST(T4130_yaca_key_generate_dh, YacaTest)
438 key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_GENERATOR_2 | 333);
439 key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_GENERATOR_5 | 512);
440 key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_1024_160);
441 key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_224);
442 key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
445 RUNNER_TEST(T4140_yaca_key_generate_ec, YacaTest)
447 // This curve doesn't work on fedora:
448 //key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME192V1);
449 key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1);
450 key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP256K1);
451 key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP384R1);
452 key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP521R1);
455 RUNNER_TEST(T4200_yaca_key_get_type_invalid_param, YacaTest)
457 yaca_key_type_e type;
459 YACA_INVALID_PARAM(yaca_key_get_type(YACA_KEY_NULL, &type));
461 auto key_ptr = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_512BIT);
463 YACA_INVALID_PARAM(yaca_key_get_type(key_ptr.get(), nullptr));
466 RUNNER_TEST(T4210_yaca_key_get_bits_invalid_param, YacaTest)
470 YACA_INVALID_PARAM(yaca_key_get_bit_length(YACA_KEY_NULL, &bits));
472 auto key_ptr = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_512BIT);
474 YACA_INVALID_PARAM(yaca_key_get_bit_length(key_ptr.get(), nullptr));
477 RUNNER_TEST(T4220_yaca_key_export_invalid_param, YacaTest)
479 KeyPtr key_sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, 1024);
480 KeyPtr key_rsa = generate_key(YACA_KEY_TYPE_RSA_PRIV, 1024);
481 KeyPtr key_rsa_pub = extract_public_key(key_rsa);
485 YACA_INVALID_PARAM(yaca_key_export(nullptr,
486 YACA_KEY_FORMAT_DEFAULT,
487 YACA_KEY_FILE_FORMAT_BASE64,
488 nullptr, &data, &data_len));
490 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
491 YACA_KEY_FORMAT_DEFAULT,
492 YACA_KEY_FILE_FORMAT_BASE64,
493 nullptr, nullptr, &data_len));
494 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
495 YACA_KEY_FORMAT_DEFAULT,
496 YACA_KEY_FILE_FORMAT_BASE64,
497 nullptr, &data, nullptr));
499 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
500 YACA_KEY_FORMAT_DEFAULT,
501 YACA_KEY_FILE_FORMAT_BASE64,
502 "pass", &data, &data_len));
503 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
504 static_cast<yaca_key_format_e>(-1),
505 YACA_KEY_FILE_FORMAT_BASE64,
506 nullptr, &data, &data_len));
507 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
508 YACA_KEY_FORMAT_DEFAULT,
509 static_cast<yaca_key_file_format_e>(-1),
510 nullptr, &data, &data_len));
511 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
512 YACA_KEY_FORMAT_DEFAULT,
513 YACA_KEY_FILE_FORMAT_PEM,
514 nullptr, &data, &data_len));
515 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
516 YACA_KEY_FORMAT_DEFAULT,
517 YACA_KEY_FILE_FORMAT_DER,
518 nullptr, &data, &data_len));
519 YACA_INVALID_PARAM(yaca_key_export(key_sym.get(),
520 YACA_KEY_FORMAT_PKCS8,
521 YACA_KEY_FILE_FORMAT_PEM,
522 nullptr, &data, &data_len));
524 YACA_INVALID_PARAM(yaca_key_export(key_rsa.get(),
525 static_cast<yaca_key_format_e>(-1),
526 YACA_KEY_FILE_FORMAT_PEM,
527 nullptr, &data, &data_len));
528 YACA_INVALID_PARAM(yaca_key_export(key_rsa.get(),
529 YACA_KEY_FORMAT_DEFAULT,
530 static_cast<yaca_key_file_format_e>(-1),
531 nullptr, &data, &data_len));
532 YACA_INVALID_PARAM(yaca_key_export(key_rsa.get(),
533 YACA_KEY_FORMAT_DEFAULT,
534 YACA_KEY_FILE_FORMAT_BASE64,
535 nullptr, &data, &data_len));
536 YACA_INVALID_PARAM(yaca_key_export(key_rsa.get(),
537 YACA_KEY_FORMAT_DEFAULT,
538 YACA_KEY_FILE_FORMAT_RAW,
539 nullptr, &data, &data_len));
541 YACA_INVALID_PARAM(yaca_key_export(key_rsa_pub.get(),
542 YACA_KEY_FORMAT_PKCS8,
543 YACA_KEY_FILE_FORMAT_PEM,
544 nullptr, &data, &data_len));
546 /* passing password with a key/format that doesn't support it */
547 YACA_INVALID_PARAM(yaca_key_export(key_rsa.get(),
548 YACA_KEY_FORMAT_DEFAULT,
549 YACA_KEY_FILE_FORMAT_DER,
550 "pass", &data, &data_len));
551 YACA_INVALID_PARAM(yaca_key_export(key_rsa_pub.get(),
552 YACA_KEY_FORMAT_DEFAULT,
553 YACA_KEY_FILE_FORMAT_PEM,
554 "pass", &data, &data_len));
556 /* not passing a password with a format that requires it */
557 YACA_INVALID_PARAM(yaca_key_export(key_rsa.get(),
558 YACA_KEY_FORMAT_PKCS8,
559 YACA_KEY_FILE_FORMAT_PEM,
560 nullptr, &data, &data_len));
561 YACA_INVALID_PARAM(yaca_key_export(key_rsa.get(),
562 YACA_KEY_FORMAT_PKCS8,
563 YACA_KEY_FILE_FORMAT_PEM,
564 "", &data, &data_len));
567 RUNNER_TEST(T4230_yaca_key_import_invalid_param, YacaTest)
569 KeyPtr key_sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT);
570 size_t key_sym_data_len;
571 ChrPtr key_sym_data = export_key(key_sym, YACA_KEY_FORMAT_DEFAULT,
572 YACA_KEY_FILE_FORMAT_BASE64,
573 nullptr, &key_sym_data_len);
575 KeyPtr key_rsa = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
576 size_t key_rsa_data_len;
577 ChrPtr key_rsa_data = export_key(key_rsa, YACA_KEY_FORMAT_DEFAULT,
578 YACA_KEY_FILE_FORMAT_DER,
579 nullptr, &key_rsa_data_len);
581 KeyPtr key_rsa_pub = extract_public_key(key_rsa);
582 size_t key_rsa_pub_data_len;
583 ChrPtr key_rsa_pub_data = export_key(key_rsa_pub, YACA_KEY_FORMAT_DEFAULT,
584 YACA_KEY_FILE_FORMAT_PEM,
585 nullptr, &key_rsa_pub_data_len);
587 const char *inv_data1 = "qwertyuiopasdfghjklzxcvbnmqwerty";
588 size_t inv_data1_len = strlen(inv_data1);
589 const char *inv_data2 = "--------qwertyuiopasdfghjklzxcvbnm";
590 size_t inv_data2_len = strlen(inv_data2);
593 YACA_INVALID_PARAM(yaca_key_import(static_cast<yaca_key_type_e>(-1), nullptr,
594 key_sym_data.get(), key_sym_data_len, &out));
595 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_SYMMETRIC, "pass",
596 key_sym_data.get(), key_sym_data_len, &out));
597 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_SYMMETRIC, nullptr,
598 nullptr, key_sym_data_len, &out));
599 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_SYMMETRIC, nullptr,
600 key_sym_data.get(), 0, &out));
601 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_DES, nullptr,
602 key_sym_data.get(), key_sym_data_len, &out));
603 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_SYMMETRIC, nullptr,
604 inv_data2, SIZE_MAX / 2, &out));
606 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PUB, nullptr,
607 key_rsa_data.get(), key_rsa_data_len, &out));
608 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_DSA_PRIV, nullptr,
609 key_rsa_data.get(), key_rsa_data_len, &out));
610 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PRIV, nullptr,
611 key_rsa_data.get(), key_rsa_data_len - 1, &out));
612 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PRIV, nullptr,
613 inv_data1, inv_data1_len, &out));
614 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PRIV, nullptr,
615 inv_data2, inv_data2_len, &out));
617 /* implementation specific tests, might go away at some point */
618 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PRIV, nullptr,
619 key_rsa_data.get(), static_cast<size_t>(INT_MAX) + 1, &out));
620 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PRIV, nullptr,
621 key_rsa_data.get(), 3, &out));
623 /* passing password with a key/format that doesn't support it */
624 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PRIV, "pass",
625 key_rsa_data.get(), key_rsa_data_len, &out));
626 YACA_INVALID_PARAM(yaca_key_import(YACA_KEY_TYPE_RSA_PUB, "pass",
627 key_rsa_pub_data.get(), key_rsa_pub_data_len, &out));
630 RUNNER_TEST(T4233_yaca_key_derive_dh_invalid_param, YacaTest)
635 KeyPtr key_dh_priv = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
636 KeyPtr key_dh_pub = extract_public_key(key_dh_priv);
638 KeyPtr key_dh_priv_2048_224 = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_224);
639 KeyPtr key_dh_pub_2048_224 = extract_public_key(key_dh_priv_2048_224);
641 KeyPtr key_ecdh_priv = generate_key(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP521R1);
642 KeyPtr key_ecdh_pub = extract_public_key(key_ecdh_priv);
644 KeyPtr key_ecdh_priv_256V1 = generate_key(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1);
645 KeyPtr key_ecdh_pub_256V1 = extract_public_key(key_ecdh_priv_256V1);
647 KeyPtr key_rsa_priv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
648 KeyPtr key_rsa_pub = extract_public_key(key_rsa_priv);
650 KeyPtr key_sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT);
652 YACA_INVALID_PARAM(yaca_key_derive_dh(null_key().get(), key_dh_pub.get(), &secret, &secret_len));
653 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_pub.get(), key_dh_pub.get(), &secret, &secret_len));
654 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_dh_pub.get(), &secret, &secret_len));
655 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_pub.get(), key_dh_pub.get(), &secret, &secret_len));
656 YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_priv.get(), key_dh_pub.get(), &secret, &secret_len));
657 YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_pub.get(), key_dh_pub.get(), &secret, &secret_len));
658 YACA_INVALID_PARAM(yaca_key_derive_dh(key_sym.get(), key_dh_pub.get(), &secret, &secret_len));
660 YACA_INVALID_PARAM(yaca_key_derive_dh(null_key().get(), key_ecdh_pub.get(), &secret, &secret_len));
661 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_ecdh_pub.get(), &secret, &secret_len));
662 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_pub.get(), key_ecdh_pub.get(), &secret, &secret_len));
663 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_pub.get(), key_ecdh_pub.get(), &secret, &secret_len));
664 YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_priv.get(), key_ecdh_pub.get(), &secret, &secret_len));
665 YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_pub.get(), key_ecdh_pub.get(), &secret, &secret_len));
666 YACA_INVALID_PARAM(yaca_key_derive_dh(key_sym.get(), key_ecdh_pub.get(), &secret, &secret_len));
668 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), null_key().get(), &secret, &secret_len));
669 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_priv.get(), &secret, &secret_len));
670 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_ecdh_priv.get(), &secret, &secret_len));
671 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_rsa_priv.get(), &secret, &secret_len));
672 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_rsa_pub.get(), &secret, &secret_len));
673 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_sym.get(), &secret, &secret_len));
675 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), null_key().get(), &secret, &secret_len));
676 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_dh_priv.get(), &secret, &secret_len));
677 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_priv.get(), &secret, &secret_len));
678 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_rsa_priv.get(), &secret, &secret_len));
679 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_rsa_pub.get(), &secret, &secret_len));
680 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_sym.get(), &secret, &secret_len));
682 YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_priv.get(), key_rsa_pub.get(), &secret, &secret_len));
684 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_pub.get(), nullptr, &secret_len));
685 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_priv.get(), nullptr, &secret_len));
687 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_pub.get(), &secret, nullptr));
688 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_pub.get(), &secret, nullptr));
690 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_pub_2048_224.get(), &secret, &secret_len));
691 YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv_2048_224.get(), key_dh_pub.get(), &secret, &secret_len));
693 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_pub_256V1.get(), &secret, &secret_len));
694 YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv_256V1.get(), key_ecdh_pub.get(), &secret, &secret_len));
697 RUNNER_TEST(T4236_yaca_key_derive_kdf_invalid_param, YacaTest)
699 yaca_kdf_e kdf = YACA_KDF_X942;
700 yaca_digest_algorithm_e digest = YACA_DIGEST_SHA512;
707 KeyPtr key_dh_priv = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
708 KeyPtr peer_key_dh_priv = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
709 KeyPtr peer_key_dh_pub = extract_public_key(peer_key_dh_priv);
711 YACA_SUCCESS(yaca_key_derive_dh(key_dh_priv.get(), peer_key_dh_pub.get(), &secret, &secret_len));
713 YACA_INVALID_PARAM(yaca_key_derive_kdf(static_cast<yaca_kdf_e>(-1),
714 digest, secret, secret_len, info, info_len, 512, &key_material));
715 YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, static_cast<yaca_digest_algorithm_e>(-1),
716 secret, secret_len, info, info_len, 512, &key_material));
717 YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, nullptr, secret_len, info, info_len, 512, &key_material));
718 YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, secret, 0, info, info_len, 512, &key_material));
719 YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, secret, secret_len, info, info_len, 0, &key_material));
720 YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, secret, secret_len, info, info_len, 512, nullptr));
723 RUNNER_TEST(T4240_yaca_key_derive_pbkdf2_invalid_param, YacaTest)
727 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2(nullptr, "salt", 4, 1, YACA_DIGEST_MD5, 128, &key));
728 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", nullptr, 4, 1, YACA_DIGEST_MD5, 128, &key));
729 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", nullptr, 1, 1, YACA_DIGEST_MD5, 128, &key));
730 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", "salt", 0, 1, YACA_DIGEST_MD5, 128, &key));
731 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", "salt", 4, 0, YACA_DIGEST_MD5, 128, &key));
732 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", "salt", 4, 1,
733 static_cast<yaca_digest_algorithm_e>(-1),128, &key));
734 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", "salt", 4, 1, YACA_DIGEST_MD5, 0, &key));
735 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", "salt", 4, 1, YACA_DIGEST_MD5, 127, &key));
736 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", "salt", 4, 1, YACA_DIGEST_MD5, 128, nullptr));
738 /* implementation specific tests, might go away at some point */
739 YACA_INVALID_PARAM(yaca_key_derive_pbkdf2("pass", "salt", 4, static_cast<size_t>(INT_MAX) + 1,
740 YACA_DIGEST_MD5, 128, &key));
743 RUNNER_TEST(T4250_yaca_key_export_import, YacaTest)
745 auto tvv = loadTestVector("key.txt");
747 for (const auto& tv : tvv) {
748 yaca_key_type_e key_type;
750 yaca_key_format_e key_format;
751 yaca_key_file_format_e key_file_format;
752 std::string password;
754 tv.get("key_type", key_type);
755 tv.get("key_len_bits", key_len_bits);
756 tv.get("key_format", key_format);
757 tv.get("key_file_format", key_file_format);
758 tv.get("password", password);
760 KeyPtr key = generate_key(key_type, key_len_bits);
763 ChrPtr key_data = export_key(key, key_format, key_file_format, password.c_str(), &key_data_len);
764 KeyPtr key_imp = import_key(key_type, password.c_str(), key_data.get(), key_data_len);
766 assert_keys_equal(key, key_imp);
768 /* password test for asymmetric DEFAULT PEM */
769 if (key_format == YACA_KEY_FORMAT_DEFAULT && is_key_private(key_type) &&
770 key_file_format == YACA_KEY_FILE_FORMAT_PEM)
771 import_key_wrong_password(key_type, password, key_data.get(), key_data_len);
773 /* password test for asymmetric PKCS8 PEM and DER */
774 if (key_format == YACA_KEY_FORMAT_PKCS8 && is_key_private(key_type))
775 import_key_wrong_password(key_type, password, key_data.get(), key_data_len);
777 /* public key and params test for asymmetric DEFAULT PEM and DER */
778 if (key_format == YACA_KEY_FORMAT_DEFAULT && is_key_private(key_type)) {
779 yaca_key_type_e key_pub_type = static_cast<yaca_key_type_e>(-1);
780 yaca_key_type_e key_params_type = static_cast<yaca_key_type_e>(-1);
783 case YACA_KEY_TYPE_RSA_PRIV:
784 key_pub_type = YACA_KEY_TYPE_RSA_PUB;
786 case YACA_KEY_TYPE_DSA_PRIV:
787 key_pub_type = YACA_KEY_TYPE_DSA_PUB;
788 key_params_type = YACA_KEY_TYPE_DSA_PARAMS;
790 case YACA_KEY_TYPE_DH_PRIV:
791 key_pub_type = YACA_KEY_TYPE_DH_PUB;
792 key_params_type = YACA_KEY_TYPE_DH_PARAMS;
794 case YACA_KEY_TYPE_EC_PRIV:
795 key_pub_type = YACA_KEY_TYPE_EC_PUB;
796 key_params_type = YACA_KEY_TYPE_EC_PARAMS;
799 RUNNER_FAIL_MSG("Wrong key_type passed");
802 if (key_pub_type != static_cast<yaca_key_type_e>(-1)) {
803 KeyPtr key_pub = extract_public_key(key);
804 size_t key_pub_data_len;
805 ChrPtr key_pub_data = export_key(key_pub, key_format, key_file_format, nullptr, &key_pub_data_len);
806 KeyPtr key_pub_imp = import_key(key_pub_type, nullptr, key_pub_data.get(), key_pub_data_len);
808 assert_keys_equal(key_pub, key_pub_imp);
811 if (key_params_type != static_cast<yaca_key_type_e>(-1)) {
812 KeyPtr key_params = extract_parameters(key);
813 size_t key_params_data_len;
814 ChrPtr key_params_data = export_key(key_params, key_format, key_file_format, nullptr, &key_params_data_len);
815 KeyPtr key_params_imp = import_key(key_params_type, nullptr, key_params_data.get(), key_params_data_len);
817 assert_keys_equal(key_params, key_params_imp);
823 RUNNER_TEST(T4260_yaca_key_import_x509, YacaTest)
825 auto tvv = loadTestVector("key_x509.txt");
827 for (const auto& tv : tvv) {
828 yaca_key_type_e key_type;
832 tv.get("key_type", key_type);
833 tv.get("cert", cert_data);
834 tv.get("pub_key", pub_key_data);
836 KeyPtr cert_key = import_key(key_type, nullptr, cert_data.data(), cert_data.size());
837 KeyPtr pub_key = import_key(key_type, nullptr, pub_key_data.data(), pub_key_data.size());
839 assert_keys_equal(cert_key, pub_key);
843 RUNNER_TEST(T4263_yaca_key_derive_dh, YacaTest)
845 auto tvv = loadTestVector("key_derive_dh.txt");
847 for (const auto& tv : tvv) {
848 yaca_key_type_e prv_key_type;
850 yaca_key_type_e pub_key_type;
854 tv.get("prv_key_type", prv_key_type);
855 tv.get("prv_key", prv_key_data);
856 tv.get("pub_key_type", pub_key_type);
857 tv.get("pub_key", pub_key_data);
858 tv.get("secret", secret_data);
860 KeyPtr prv_key = import_key(prv_key_type, nullptr, prv_key_data.data(), prv_key_data.size());
861 KeyPtr pub_key = import_key(pub_key_type, nullptr, pub_key_data.data(), pub_key_data.size());
864 ChrPtr derived_secret = key_derive_dh(prv_key, pub_key, &secret_len);
866 YACA_ASSERT_MSG(secret_data.size() == secret_len, "Compared secrets are not of equal length");
867 YACA_SUCCESS(yaca_memcmp(secret_data.data(), derived_secret.get(), secret_data.size()));
871 RUNNER_TEST(T4266_yaca_key_derive_kdf, YacaTest)
873 auto tvv = loadTestVector("key_derive_kdf.txt");
875 for (const auto& tv : tvv) {
877 yaca_digest_algorithm_e algo;
883 tv.get("algo", algo);
884 tv.get("secret", secret);
885 tv.get("info", info);
886 tv.get("key_material", key_material);
888 ChrPtr derived_key_material = key_derive_kdf(kdf, algo, secret.data(), secret.size(),
889 info.data(), info.size(), key_material.size());
891 YACA_SUCCESS(yaca_memcmp(key_material.data(), derived_key_material.get(), key_material.size()));
895 RUNNER_TEST(T4270_yaca_key_derive_pbkdf2, YacaTest)
897 auto tvv = loadTestVector("key_pbkdf2.txt");
899 for (const auto& tv : tvv) {
900 std::string password;
903 yaca_digest_algorithm_e algo;
907 tv.get("password", password);
908 tv.get("salt", salt);
909 tv.get("iter", iter);
910 tv.get("algo", algo);
911 tv.get("key_bit_len", key_bit_len);
912 tv.get("key", key_data);
914 KeyPtr key_expected = import_key(YACA_KEY_TYPE_SYMMETRIC, nullptr, key_data.data(), key_data.size());
915 KeyPtr key_derived = key_derive_pbkdf2(password.c_str(), salt.data(), salt.size(), iter, algo, key_bit_len);
917 assert_keys_equal(key_expected, key_derived);