xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_pkcs12.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */
2*62c56f98SSadaf Ebrahimi#include "mbedtls/pkcs12.h"
3*62c56f98SSadaf Ebrahimi#include "common.h"
4*62c56f98SSadaf Ebrahimi
5*62c56f98SSadaf Ebrahimitypedef enum {
6*62c56f98SSadaf Ebrahimi    USE_NULL_INPUT = 0,
7*62c56f98SSadaf Ebrahimi    USE_GIVEN_INPUT = 1,
8*62c56f98SSadaf Ebrahimi} input_usage_method_t;
9*62c56f98SSadaf Ebrahimi
10*62c56f98SSadaf Ebrahimi/* END_HEADER */
11*62c56f98SSadaf Ebrahimi
12*62c56f98SSadaf Ebrahimi/* BEGIN_DEPENDENCIES
13*62c56f98SSadaf Ebrahimi * depends_on:MBEDTLS_PKCS12_C
14*62c56f98SSadaf Ebrahimi * END_DEPENDENCIES
15*62c56f98SSadaf Ebrahimi */
16*62c56f98SSadaf Ebrahimi
17*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
18*62c56f98SSadaf Ebrahimivoid pkcs12_derive_key(int md_type, int key_size_arg,
19*62c56f98SSadaf Ebrahimi                       data_t *password_arg, int password_usage,
20*62c56f98SSadaf Ebrahimi                       data_t *salt_arg, int salt_usage,
21*62c56f98SSadaf Ebrahimi                       int iterations,
22*62c56f98SSadaf Ebrahimi                       data_t *expected_output, int expected_status)
23*62c56f98SSadaf Ebrahimi
24*62c56f98SSadaf Ebrahimi{
25*62c56f98SSadaf Ebrahimi    unsigned char *output_data = NULL;
26*62c56f98SSadaf Ebrahimi
27*62c56f98SSadaf Ebrahimi    unsigned char *password = NULL;
28*62c56f98SSadaf Ebrahimi    size_t password_len = 0;
29*62c56f98SSadaf Ebrahimi    unsigned char *salt = NULL;
30*62c56f98SSadaf Ebrahimi    size_t salt_len = 0;
31*62c56f98SSadaf Ebrahimi    size_t key_size = key_size_arg;
32*62c56f98SSadaf Ebrahimi
33*62c56f98SSadaf Ebrahimi    MD_PSA_INIT();
34*62c56f98SSadaf Ebrahimi
35*62c56f98SSadaf Ebrahimi    if (password_usage == USE_GIVEN_INPUT) {
36*62c56f98SSadaf Ebrahimi        password = password_arg->x;
37*62c56f98SSadaf Ebrahimi    }
38*62c56f98SSadaf Ebrahimi
39*62c56f98SSadaf Ebrahimi    password_len = password_arg->len;
40*62c56f98SSadaf Ebrahimi
41*62c56f98SSadaf Ebrahimi    if (salt_usage == USE_GIVEN_INPUT) {
42*62c56f98SSadaf Ebrahimi        salt = salt_arg->x;
43*62c56f98SSadaf Ebrahimi    }
44*62c56f98SSadaf Ebrahimi
45*62c56f98SSadaf Ebrahimi    salt_len = salt_arg->len;
46*62c56f98SSadaf Ebrahimi
47*62c56f98SSadaf Ebrahimi    TEST_CALLOC(output_data, key_size);
48*62c56f98SSadaf Ebrahimi
49*62c56f98SSadaf Ebrahimi    int ret = mbedtls_pkcs12_derivation(output_data,
50*62c56f98SSadaf Ebrahimi                                        key_size,
51*62c56f98SSadaf Ebrahimi                                        password,
52*62c56f98SSadaf Ebrahimi                                        password_len,
53*62c56f98SSadaf Ebrahimi                                        salt,
54*62c56f98SSadaf Ebrahimi                                        salt_len,
55*62c56f98SSadaf Ebrahimi                                        md_type,
56*62c56f98SSadaf Ebrahimi                                        MBEDTLS_PKCS12_DERIVE_KEY,
57*62c56f98SSadaf Ebrahimi                                        iterations);
58*62c56f98SSadaf Ebrahimi
59*62c56f98SSadaf Ebrahimi    TEST_EQUAL(ret, expected_status);
60*62c56f98SSadaf Ebrahimi
61*62c56f98SSadaf Ebrahimi    if (expected_status == 0) {
62*62c56f98SSadaf Ebrahimi        TEST_MEMORY_COMPARE(expected_output->x, expected_output->len,
63*62c56f98SSadaf Ebrahimi                            output_data, key_size);
64*62c56f98SSadaf Ebrahimi    }
65*62c56f98SSadaf Ebrahimi
66*62c56f98SSadaf Ebrahimiexit:
67*62c56f98SSadaf Ebrahimi    mbedtls_free(output_data);
68*62c56f98SSadaf Ebrahimi    MD_PSA_DONE();
69*62c56f98SSadaf Ebrahimi}
70*62c56f98SSadaf Ebrahimi/* END_CASE */
71*62c56f98SSadaf Ebrahimi
72*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */
73*62c56f98SSadaf Ebrahimivoid pkcs12_pbe_encrypt(int params_tag, int cipher, int md, data_t *params_hex, data_t *pw,
74*62c56f98SSadaf Ebrahimi                        data_t *data, int outsize, int ref_ret, data_t *ref_out)
75*62c56f98SSadaf Ebrahimi{
76*62c56f98SSadaf Ebrahimi    int my_ret;
77*62c56f98SSadaf Ebrahimi    mbedtls_asn1_buf pbe_params;
78*62c56f98SSadaf Ebrahimi    unsigned char *my_out = NULL;
79*62c56f98SSadaf Ebrahimi    mbedtls_cipher_type_t cipher_alg = (mbedtls_cipher_type_t) cipher;
80*62c56f98SSadaf Ebrahimi    mbedtls_md_type_t md_alg = (mbedtls_md_type_t) md;
81*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
82*62c56f98SSadaf Ebrahimi    size_t my_out_len = 0;
83*62c56f98SSadaf Ebrahimi#endif
84*62c56f98SSadaf Ebrahimi
85*62c56f98SSadaf Ebrahimi    MD_PSA_INIT();
86*62c56f98SSadaf Ebrahimi
87*62c56f98SSadaf Ebrahimi    TEST_CALLOC(my_out, outsize);
88*62c56f98SSadaf Ebrahimi
89*62c56f98SSadaf Ebrahimi    pbe_params.tag = params_tag;
90*62c56f98SSadaf Ebrahimi    pbe_params.len = params_hex->len;
91*62c56f98SSadaf Ebrahimi    pbe_params.p = params_hex->x;
92*62c56f98SSadaf Ebrahimi
93*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_TEST_DEPRECATED)
94*62c56f98SSadaf Ebrahimi    if (ref_ret != MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) {
95*62c56f98SSadaf Ebrahimi        my_ret = mbedtls_pkcs12_pbe(&pbe_params, MBEDTLS_PKCS12_PBE_ENCRYPT, cipher_alg,
96*62c56f98SSadaf Ebrahimi                                    md_alg, pw->x, pw->len, data->x, data->len, my_out);
97*62c56f98SSadaf Ebrahimi        TEST_EQUAL(my_ret, ref_ret);
98*62c56f98SSadaf Ebrahimi    }
99*62c56f98SSadaf Ebrahimi    if (ref_ret == 0) {
100*62c56f98SSadaf Ebrahimi        ASSERT_COMPARE(my_out, ref_out->len,
101*62c56f98SSadaf Ebrahimi                       ref_out->x, ref_out->len);
102*62c56f98SSadaf Ebrahimi    }
103*62c56f98SSadaf Ebrahimi#endif
104*62c56f98SSadaf Ebrahimi
105*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
106*62c56f98SSadaf Ebrahimi
107*62c56f98SSadaf Ebrahimi    pbe_params.tag = params_tag;
108*62c56f98SSadaf Ebrahimi    pbe_params.len = params_hex->len;
109*62c56f98SSadaf Ebrahimi    pbe_params.p = params_hex->x;
110*62c56f98SSadaf Ebrahimi
111*62c56f98SSadaf Ebrahimi    my_ret = mbedtls_pkcs12_pbe_ext(&pbe_params, MBEDTLS_PKCS12_PBE_ENCRYPT, cipher_alg,
112*62c56f98SSadaf Ebrahimi                                    md_alg, pw->x, pw->len, data->x, data->len, my_out,
113*62c56f98SSadaf Ebrahimi                                    outsize, &my_out_len);
114*62c56f98SSadaf Ebrahimi    TEST_EQUAL(my_ret, ref_ret);
115*62c56f98SSadaf Ebrahimi    if (ref_ret == 0) {
116*62c56f98SSadaf Ebrahimi        ASSERT_COMPARE(my_out, my_out_len,
117*62c56f98SSadaf Ebrahimi                       ref_out->x, ref_out->len);
118*62c56f98SSadaf Ebrahimi    }
119*62c56f98SSadaf Ebrahimi#endif
120*62c56f98SSadaf Ebrahimi
121*62c56f98SSadaf Ebrahimiexit:
122*62c56f98SSadaf Ebrahimi    mbedtls_free(my_out);
123*62c56f98SSadaf Ebrahimi    MD_PSA_DONE();
124*62c56f98SSadaf Ebrahimi}
125*62c56f98SSadaf Ebrahimi/* END_CASE */
126*62c56f98SSadaf Ebrahimi
127*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_ASN1_PARSE_C */
128*62c56f98SSadaf Ebrahimivoid pkcs12_pbe_decrypt(int params_tag, int cipher, int md, data_t *params_hex, data_t *pw,
129*62c56f98SSadaf Ebrahimi                        data_t *data, int outsize, int ref_ret, data_t *ref_out)
130*62c56f98SSadaf Ebrahimi{
131*62c56f98SSadaf Ebrahimi    int my_ret;
132*62c56f98SSadaf Ebrahimi    mbedtls_asn1_buf pbe_params;
133*62c56f98SSadaf Ebrahimi    unsigned char *my_out = NULL;
134*62c56f98SSadaf Ebrahimi    mbedtls_cipher_type_t cipher_alg = (mbedtls_cipher_type_t) cipher;
135*62c56f98SSadaf Ebrahimi    mbedtls_md_type_t md_alg = (mbedtls_md_type_t) md;
136*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
137*62c56f98SSadaf Ebrahimi    size_t my_out_len = 0;
138*62c56f98SSadaf Ebrahimi#endif
139*62c56f98SSadaf Ebrahimi
140*62c56f98SSadaf Ebrahimi    MD_PSA_INIT();
141*62c56f98SSadaf Ebrahimi
142*62c56f98SSadaf Ebrahimi    TEST_CALLOC(my_out, outsize);
143*62c56f98SSadaf Ebrahimi
144*62c56f98SSadaf Ebrahimi    pbe_params.tag = params_tag;
145*62c56f98SSadaf Ebrahimi    pbe_params.len = params_hex->len;
146*62c56f98SSadaf Ebrahimi    pbe_params.p = params_hex->x;
147*62c56f98SSadaf Ebrahimi
148*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_TEST_DEPRECATED)
149*62c56f98SSadaf Ebrahimi    if (ref_ret != MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) {
150*62c56f98SSadaf Ebrahimi        my_ret = mbedtls_pkcs12_pbe(&pbe_params, MBEDTLS_PKCS12_PBE_DECRYPT, cipher_alg,
151*62c56f98SSadaf Ebrahimi                                    md_alg, pw->x, pw->len, data->x, data->len, my_out);
152*62c56f98SSadaf Ebrahimi        TEST_EQUAL(my_ret, ref_ret);
153*62c56f98SSadaf Ebrahimi    }
154*62c56f98SSadaf Ebrahimi
155*62c56f98SSadaf Ebrahimi    if (ref_ret == 0) {
156*62c56f98SSadaf Ebrahimi        ASSERT_COMPARE(my_out, ref_out->len,
157*62c56f98SSadaf Ebrahimi                       ref_out->x, ref_out->len);
158*62c56f98SSadaf Ebrahimi    }
159*62c56f98SSadaf Ebrahimi#endif
160*62c56f98SSadaf Ebrahimi
161*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_CIPHER_PADDING_PKCS7)
162*62c56f98SSadaf Ebrahimi
163*62c56f98SSadaf Ebrahimi    pbe_params.tag = params_tag;
164*62c56f98SSadaf Ebrahimi    pbe_params.len = params_hex->len;
165*62c56f98SSadaf Ebrahimi    pbe_params.p = params_hex->x;
166*62c56f98SSadaf Ebrahimi
167*62c56f98SSadaf Ebrahimi    my_ret = mbedtls_pkcs12_pbe_ext(&pbe_params, MBEDTLS_PKCS12_PBE_DECRYPT, cipher_alg,
168*62c56f98SSadaf Ebrahimi                                    md_alg, pw->x, pw->len, data->x, data->len, my_out,
169*62c56f98SSadaf Ebrahimi                                    outsize, &my_out_len);
170*62c56f98SSadaf Ebrahimi    TEST_EQUAL(my_ret, ref_ret);
171*62c56f98SSadaf Ebrahimi    if (ref_ret == 0) {
172*62c56f98SSadaf Ebrahimi        ASSERT_COMPARE(my_out, my_out_len,
173*62c56f98SSadaf Ebrahimi                       ref_out->x, ref_out->len);
174*62c56f98SSadaf Ebrahimi    }
175*62c56f98SSadaf Ebrahimi#endif
176*62c56f98SSadaf Ebrahimi
177*62c56f98SSadaf Ebrahimiexit:
178*62c56f98SSadaf Ebrahimi    mbedtls_free(my_out);
179*62c56f98SSadaf Ebrahimi    MD_PSA_DONE();
180*62c56f98SSadaf Ebrahimi}
181*62c56f98SSadaf Ebrahimi/* END_CASE */
182