blob: 27393d06aa31b60615e4f88db1c3b61f438ad827 [file] [log] [blame]
Paul Elliott13d5a342021-11-18 22:35:48 +00001/* BEGIN_HEADER */
2#include "mbedtls/pkcs12.h"
3#include "mbedtls/error.h"
4
5typedef enum
6{
7 USE_NULL_INPUT = 0,
8 USE_GIVEN_INPUT = 1,
9 USE_NULL_INPUT_WITH_SIZE = 2,
10} input_usage_method_t;
11
12/* END_HEADER */
13
14/* BEGIN_DEPENDENCIES
Paul Elliott1a3540a2021-11-22 17:50:26 +000015 * depends_on:MBEDTLS_ASN1_PARSE_C:MBEDTLS_PKCS12_C
Paul Elliott13d5a342021-11-18 22:35:48 +000016 * END_DEPENDENCIES
17 */
18
19/* BEGIN_CASE */
20void pkcs12_derive_key_test( int md_type, int key_size_arg,
21 data_t *password_arg, int password_usage,
22 data_t *salt_arg, int salt_usage,
23 int iterations, int expected_status )
24
25{
26 int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
27 unsigned char *output_data = NULL;
28
29 unsigned char *password = NULL;
30 size_t password_len = 0;
31 unsigned char *salt = NULL;
32 size_t salt_len = 0;
33 size_t key_size = key_size_arg;
34
35 if( password_usage == USE_GIVEN_INPUT )
36 {
37 password = password_arg->x;
38 password_len = password_arg->len;
39 }
40 else if( password_usage == USE_NULL_INPUT_WITH_SIZE )
41 {
42 password_len = password_arg->len;
43 }
44
45 if( salt_usage == USE_GIVEN_INPUT )
46 {
47 salt = salt_arg->x;
48 salt_len = salt_arg->len;
49 }
50 else if( salt_usage == USE_NULL_INPUT_WITH_SIZE )
51 {
52 salt_len = salt_arg->len;
53 }
54
55 ASSERT_ALLOC( output_data, key_size );
56
57 ret = mbedtls_pkcs12_derivation( output_data,
58 key_size,
59 password,
60 password_len,
61 salt,
62 salt_len,
63 md_type,
64 MBEDTLS_PKCS12_DERIVE_KEY,
65 iterations );
66
67 TEST_EQUAL( ret, expected_status );
68
69exit:
70 mbedtls_free( output_data );
71
72}
73/* END_CASE */