blob: ab51e02fa5b77bb2b9186aa0d87d606f0f4bbf26 [file] [log] [blame]
/* BEGIN_HEADER */
#include "mbedtls/pkcs12.h"
#include "common.h"
#include "mbedtls/legacy_or_psa.h"
typedef enum {
USE_NULL_INPUT = 0,
USE_GIVEN_INPUT = 1,
} input_usage_method_t;
/* END_HEADER */
/* BEGIN_DEPENDENCIES
* depends_on:MBEDTLS_PKCS12_C
* END_DEPENDENCIES
*/
/* BEGIN_CASE */
void pkcs12_derive_key(int md_type, int key_size_arg,
data_t *password_arg, int password_usage,
data_t *salt_arg, int salt_usage,
int iterations,
data_t *expected_output, int expected_status)
{
unsigned char *output_data = NULL;
unsigned char *password = NULL;
size_t password_len = 0;
unsigned char *salt = NULL;
size_t salt_len = 0;
size_t key_size = key_size_arg;
if (password_usage == USE_GIVEN_INPUT) {
password = password_arg->x;
}
password_len = password_arg->len;
if (salt_usage == USE_GIVEN_INPUT) {
salt = salt_arg->x;
}
salt_len = salt_arg->len;
ASSERT_ALLOC(output_data, key_size);
int ret = mbedtls_pkcs12_derivation(output_data,
key_size,
password,
password_len,
salt,
salt_len,
md_type,
MBEDTLS_PKCS12_DERIVE_KEY,
iterations);
TEST_EQUAL(ret, expected_status);
if (expected_status == 0) {
ASSERT_COMPARE(expected_output->x, expected_output->len,
output_data, key_size);
}
exit:
mbedtls_free(output_data);
}
/* END_CASE */