blob: 17d2ed705c6b858b1da36a1661ffd0357953250b [file] [log] [blame]
Paul Elliott13d5a342021-11-18 22:35:48 +00001/* BEGIN_HEADER */
2#include "mbedtls/pkcs12.h"
3#include "mbedtls/error.h"
4
Gilles Peskine1b6c09a2023-01-11 14:52:35 +01005typedef enum {
6 USE_NULL_INPUT = 0,
7 USE_GIVEN_INPUT = 1,
Paul Elliott13d5a342021-11-18 22:35:48 +00008} input_usage_method_t;
9
10/* END_HEADER */
11
12/* BEGIN_DEPENDENCIES
Paul Elliott8ca8f2d2021-11-30 16:21:27 +000013 * depends_on:MBEDTLS_PKCS12_C
Paul Elliott13d5a342021-11-18 22:35:48 +000014 * END_DEPENDENCIES
15 */
16
17/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010018void pkcs12_derive_key(int md_type, int key_size_arg,
19 data_t *password_arg, int password_usage,
20 data_t *salt_arg, int salt_usage,
21 int iterations,
22 data_t *expected_output, int expected_status)
Paul Elliott13d5a342021-11-18 22:35:48 +000023
24{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010025 unsigned char *output_data = NULL;
Paul Elliott13d5a342021-11-18 22:35:48 +000026
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010027 unsigned char *password = NULL;
28 size_t password_len = 0;
29 unsigned char *salt = NULL;
30 size_t salt_len = 0;
31 size_t key_size = key_size_arg;
Paul Elliott13d5a342021-11-18 22:35:48 +000032
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010033 if (password_usage == USE_GIVEN_INPUT) {
34 password = password_arg->x;
35 }
Paul Elliott270a2642021-11-30 16:39:51 +000036
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010037 password_len = password_arg->len;
Paul Elliott13d5a342021-11-18 22:35:48 +000038
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010039 if (salt_usage == USE_GIVEN_INPUT) {
40 salt = salt_arg->x;
41 }
Paul Elliott270a2642021-11-30 16:39:51 +000042
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010043 salt_len = salt_arg->len;
Paul Elliott13d5a342021-11-18 22:35:48 +000044
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010045 ASSERT_ALLOC(output_data, key_size);
Paul Elliott13d5a342021-11-18 22:35:48 +000046
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010047 int ret = mbedtls_pkcs12_derivation(output_data,
Gilles Peskined84ed272022-09-15 21:05:04 +020048 key_size,
49 password,
50 password_len,
51 salt,
52 salt_len,
53 md_type,
54 MBEDTLS_PKCS12_DERIVE_KEY,
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010055 iterations);
Paul Elliott13d5a342021-11-18 22:35:48 +000056
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010057 TEST_EQUAL(ret, expected_status);
Paul Elliott13d5a342021-11-18 22:35:48 +000058
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010059 if (expected_status == 0) {
60 ASSERT_COMPARE(expected_output->x, expected_output->len,
61 output_data, key_size);
62 }
Paul Elliott5752b4b2021-12-03 18:55:31 +000063
Paul Elliott13d5a342021-11-18 22:35:48 +000064exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010065 mbedtls_free(output_data);
Paul Elliott13d5a342021-11-18 22:35:48 +000066
67}
68/* END_CASE */