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