1a8e1175bSopenharmony_ci/* BEGIN_HEADER */
2a8e1175bSopenharmony_ci#include "mbedtls/hmac_drbg.h"
3a8e1175bSopenharmony_ci#include "string.h"
4a8e1175bSopenharmony_ci
5a8e1175bSopenharmony_citypedef struct {
6a8e1175bSopenharmony_ci    unsigned char *p;
7a8e1175bSopenharmony_ci    size_t len;
8a8e1175bSopenharmony_ci} entropy_ctx;
9a8e1175bSopenharmony_ci
10a8e1175bSopenharmony_cistatic int mbedtls_test_entropy_func(void *data, unsigned char *buf, size_t len)
11a8e1175bSopenharmony_ci{
12a8e1175bSopenharmony_ci    entropy_ctx *ctx = (entropy_ctx *) data;
13a8e1175bSopenharmony_ci
14a8e1175bSopenharmony_ci    if (len > ctx->len) {
15a8e1175bSopenharmony_ci        return -1;
16a8e1175bSopenharmony_ci    }
17a8e1175bSopenharmony_ci
18a8e1175bSopenharmony_ci    memcpy(buf, ctx->p, len);
19a8e1175bSopenharmony_ci
20a8e1175bSopenharmony_ci    ctx->p += len;
21a8e1175bSopenharmony_ci    ctx->len -= len;
22a8e1175bSopenharmony_ci
23a8e1175bSopenharmony_ci    return 0;
24a8e1175bSopenharmony_ci}
25a8e1175bSopenharmony_ci/* END_HEADER */
26a8e1175bSopenharmony_ci
27a8e1175bSopenharmony_ci/* BEGIN_DEPENDENCIES
28a8e1175bSopenharmony_ci * depends_on:MBEDTLS_HMAC_DRBG_C
29a8e1175bSopenharmony_ci * END_DEPENDENCIES
30a8e1175bSopenharmony_ci */
31a8e1175bSopenharmony_ci
32a8e1175bSopenharmony_ci/* BEGIN_CASE */
33a8e1175bSopenharmony_civoid hmac_drbg_entropy_usage(int md_alg)
34a8e1175bSopenharmony_ci{
35a8e1175bSopenharmony_ci    unsigned char out[16];
36a8e1175bSopenharmony_ci    unsigned char buf[1024];
37a8e1175bSopenharmony_ci    const mbedtls_md_info_t *md_info;
38a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_context ctx;
39a8e1175bSopenharmony_ci    entropy_ctx entropy;
40a8e1175bSopenharmony_ci    size_t i, reps = 10;
41a8e1175bSopenharmony_ci    size_t default_entropy_len;
42a8e1175bSopenharmony_ci    size_t expected_consumed_entropy = 0;
43a8e1175bSopenharmony_ci
44a8e1175bSopenharmony_ci    MD_PSA_INIT();
45a8e1175bSopenharmony_ci
46a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_init(&ctx);
47a8e1175bSopenharmony_ci    memset(buf, 0, sizeof(buf));
48a8e1175bSopenharmony_ci    memset(out, 0, sizeof(out));
49a8e1175bSopenharmony_ci
50a8e1175bSopenharmony_ci    entropy.len = sizeof(buf);
51a8e1175bSopenharmony_ci    entropy.p = buf;
52a8e1175bSopenharmony_ci
53a8e1175bSopenharmony_ci    md_info = mbedtls_md_info_from_type(md_alg);
54a8e1175bSopenharmony_ci    TEST_ASSERT(md_info != NULL);
55a8e1175bSopenharmony_ci    if (mbedtls_md_get_size(md_info) <= 20) {
56a8e1175bSopenharmony_ci        default_entropy_len = 16;
57a8e1175bSopenharmony_ci    } else if (mbedtls_md_get_size(md_info) <= 28) {
58a8e1175bSopenharmony_ci        default_entropy_len = 24;
59a8e1175bSopenharmony_ci    } else {
60a8e1175bSopenharmony_ci        default_entropy_len = 32;
61a8e1175bSopenharmony_ci    }
62a8e1175bSopenharmony_ci
63a8e1175bSopenharmony_ci    /* Set reseed interval before seed */
64a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_reseed_interval(&ctx, 2 * reps);
65a8e1175bSopenharmony_ci
66a8e1175bSopenharmony_ci    /* Init must use entropy */
67a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_seed(&ctx, md_info, mbedtls_test_entropy_func, &entropy,
68a8e1175bSopenharmony_ci                                       NULL, 0) == 0);
69a8e1175bSopenharmony_ci    /* default_entropy_len of entropy, plus half as much for the nonce */
70a8e1175bSopenharmony_ci    expected_consumed_entropy += default_entropy_len * 3 / 2;
71a8e1175bSopenharmony_ci    TEST_EQUAL(sizeof(buf)  - entropy.len, expected_consumed_entropy);
72a8e1175bSopenharmony_ci
73a8e1175bSopenharmony_ci    /* By default, PR is off, and reseed interval was set to
74a8e1175bSopenharmony_ci     * 2 * reps so the next few calls should not use entropy */
75a8e1175bSopenharmony_ci    for (i = 0; i < reps; i++) {
76a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_hmac_drbg_random(&ctx, out, sizeof(out) - 4) == 0);
77a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, out, sizeof(out) - 4,
78a8e1175bSopenharmony_ci                                                      buf, 16) == 0);
79a8e1175bSopenharmony_ci    }
80a8e1175bSopenharmony_ci    TEST_EQUAL(sizeof(buf)  - entropy.len, expected_consumed_entropy);
81a8e1175bSopenharmony_ci
82a8e1175bSopenharmony_ci    /* While at it, make sure we didn't write past the requested length */
83a8e1175bSopenharmony_ci    TEST_ASSERT(out[sizeof(out) - 4] == 0);
84a8e1175bSopenharmony_ci    TEST_ASSERT(out[sizeof(out) - 3] == 0);
85a8e1175bSopenharmony_ci    TEST_ASSERT(out[sizeof(out) - 2] == 0);
86a8e1175bSopenharmony_ci    TEST_ASSERT(out[sizeof(out) - 1] == 0);
87a8e1175bSopenharmony_ci
88a8e1175bSopenharmony_ci    /* There have been 2 * reps calls to random. The next call should reseed */
89a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random(&ctx, out, sizeof(out)) == 0);
90a8e1175bSopenharmony_ci    expected_consumed_entropy += default_entropy_len;
91a8e1175bSopenharmony_ci    TEST_EQUAL(sizeof(buf)  - entropy.len, expected_consumed_entropy);
92a8e1175bSopenharmony_ci
93a8e1175bSopenharmony_ci    /* Set reseed interval after seed */
94a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_reseed_interval(&ctx, 4 * reps + 1);
95a8e1175bSopenharmony_ci
96a8e1175bSopenharmony_ci    /* The new few calls should not reseed */
97a8e1175bSopenharmony_ci    for (i = 0; i < (2 * reps); i++) {
98a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_hmac_drbg_random(&ctx, out, sizeof(out)) == 0);
99a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, out, sizeof(out),
100a8e1175bSopenharmony_ci                                                      buf, 16) == 0);
101a8e1175bSopenharmony_ci    }
102a8e1175bSopenharmony_ci    TEST_EQUAL(sizeof(buf)  - entropy.len, expected_consumed_entropy);
103a8e1175bSopenharmony_ci
104a8e1175bSopenharmony_ci    /* Now enable PR, so the next few calls should all reseed */
105a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_prediction_resistance(&ctx, MBEDTLS_HMAC_DRBG_PR_ON);
106a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random(&ctx, out, sizeof(out)) == 0);
107a8e1175bSopenharmony_ci    expected_consumed_entropy += default_entropy_len;
108a8e1175bSopenharmony_ci    TEST_EQUAL(sizeof(buf)  - entropy.len, expected_consumed_entropy);
109a8e1175bSopenharmony_ci
110a8e1175bSopenharmony_ci    /* Finally, check setting entropy_len */
111a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_entropy_len(&ctx, 42);
112a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random(&ctx, out, sizeof(out)) == 0);
113a8e1175bSopenharmony_ci    expected_consumed_entropy += 42;
114a8e1175bSopenharmony_ci    TEST_EQUAL(sizeof(buf)  - entropy.len, expected_consumed_entropy);
115a8e1175bSopenharmony_ci
116a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_entropy_len(&ctx, 13);
117a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random(&ctx, out, sizeof(out)) == 0);
118a8e1175bSopenharmony_ci    expected_consumed_entropy += 13;
119a8e1175bSopenharmony_ci    TEST_EQUAL(sizeof(buf)  - entropy.len, expected_consumed_entropy);
120a8e1175bSopenharmony_ci
121a8e1175bSopenharmony_ciexit:
122a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_free(&ctx);
123a8e1175bSopenharmony_ci    MD_PSA_DONE();
124a8e1175bSopenharmony_ci}
125a8e1175bSopenharmony_ci/* END_CASE */
126a8e1175bSopenharmony_ci
127a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
128a8e1175bSopenharmony_civoid hmac_drbg_seed_file(int md_alg, char *path, int ret)
129a8e1175bSopenharmony_ci{
130a8e1175bSopenharmony_ci    const mbedtls_md_info_t *md_info;
131a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_context ctx;
132a8e1175bSopenharmony_ci
133a8e1175bSopenharmony_ci    MD_PSA_INIT();
134a8e1175bSopenharmony_ci
135a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_init(&ctx);
136a8e1175bSopenharmony_ci
137a8e1175bSopenharmony_ci    md_info = mbedtls_md_info_from_type(md_alg);
138a8e1175bSopenharmony_ci    TEST_ASSERT(md_info != NULL);
139a8e1175bSopenharmony_ci
140a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_seed(&ctx, md_info,
141a8e1175bSopenharmony_ci                                       mbedtls_test_rnd_std_rand, NULL,
142a8e1175bSopenharmony_ci                                       NULL, 0) == 0);
143a8e1175bSopenharmony_ci
144a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_write_seed_file(&ctx, path) == ret);
145a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_update_seed_file(&ctx, path) == ret);
146a8e1175bSopenharmony_ci
147a8e1175bSopenharmony_ciexit:
148a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_free(&ctx);
149a8e1175bSopenharmony_ci    MD_PSA_DONE();
150a8e1175bSopenharmony_ci}
151a8e1175bSopenharmony_ci/* END_CASE */
152a8e1175bSopenharmony_ci
153a8e1175bSopenharmony_ci/* BEGIN_CASE */
154a8e1175bSopenharmony_civoid hmac_drbg_buf(int md_alg)
155a8e1175bSopenharmony_ci{
156a8e1175bSopenharmony_ci    unsigned char out[16];
157a8e1175bSopenharmony_ci    unsigned char buf[100];
158a8e1175bSopenharmony_ci    const mbedtls_md_info_t *md_info;
159a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_context ctx;
160a8e1175bSopenharmony_ci    size_t i;
161a8e1175bSopenharmony_ci
162a8e1175bSopenharmony_ci    MD_PSA_INIT();
163a8e1175bSopenharmony_ci
164a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_init(&ctx);
165a8e1175bSopenharmony_ci    memset(buf, 0, sizeof(buf));
166a8e1175bSopenharmony_ci    memset(out, 0, sizeof(out));
167a8e1175bSopenharmony_ci
168a8e1175bSopenharmony_ci    md_info = mbedtls_md_info_from_type(md_alg);
169a8e1175bSopenharmony_ci    TEST_ASSERT(md_info != NULL);
170a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_seed_buf(&ctx, md_info, buf, sizeof(buf)) == 0);
171a8e1175bSopenharmony_ci
172a8e1175bSopenharmony_ci    /* Make sure it never tries to reseed (would segfault otherwise) */
173a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_reseed_interval(&ctx, 3);
174a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_prediction_resistance(&ctx, MBEDTLS_HMAC_DRBG_PR_ON);
175a8e1175bSopenharmony_ci
176a8e1175bSopenharmony_ci    for (i = 0; i < 30; i++) {
177a8e1175bSopenharmony_ci        TEST_ASSERT(mbedtls_hmac_drbg_random(&ctx, out, sizeof(out)) == 0);
178a8e1175bSopenharmony_ci    }
179a8e1175bSopenharmony_ci
180a8e1175bSopenharmony_ciexit:
181a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_free(&ctx);
182a8e1175bSopenharmony_ci    MD_PSA_DONE();
183a8e1175bSopenharmony_ci}
184a8e1175bSopenharmony_ci/* END_CASE */
185a8e1175bSopenharmony_ci
186a8e1175bSopenharmony_ci/* BEGIN_CASE */
187a8e1175bSopenharmony_civoid hmac_drbg_no_reseed(int md_alg, data_t *entropy,
188a8e1175bSopenharmony_ci                         data_t *custom, data_t *add1,
189a8e1175bSopenharmony_ci                         data_t *add2, data_t *output)
190a8e1175bSopenharmony_ci{
191a8e1175bSopenharmony_ci    unsigned char data[1024];
192a8e1175bSopenharmony_ci    unsigned char my_output[512];
193a8e1175bSopenharmony_ci    entropy_ctx p_entropy;
194a8e1175bSopenharmony_ci    const mbedtls_md_info_t *md_info;
195a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_context ctx;
196a8e1175bSopenharmony_ci
197a8e1175bSopenharmony_ci    MD_PSA_INIT();
198a8e1175bSopenharmony_ci
199a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_init(&ctx);
200a8e1175bSopenharmony_ci
201a8e1175bSopenharmony_ci    p_entropy.p = entropy->x;
202a8e1175bSopenharmony_ci    p_entropy.len = entropy->len;
203a8e1175bSopenharmony_ci
204a8e1175bSopenharmony_ci    md_info = mbedtls_md_info_from_type(md_alg);
205a8e1175bSopenharmony_ci    TEST_ASSERT(md_info != NULL);
206a8e1175bSopenharmony_ci
207a8e1175bSopenharmony_ci    /* Test the simplified buffer-based variant */
208a8e1175bSopenharmony_ci    memcpy(data, entropy->x, p_entropy.len);
209a8e1175bSopenharmony_ci    memcpy(data + p_entropy.len, custom->x, custom->len);
210a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_seed_buf(&ctx, md_info,
211a8e1175bSopenharmony_ci                                           data, p_entropy.len + custom->len) == 0);
212a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
213a8e1175bSopenharmony_ci                                                  add1->x, add1->len) == 0);
214a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
215a8e1175bSopenharmony_ci                                                  add2->x, add2->len) == 0);
216a8e1175bSopenharmony_ci
217a8e1175bSopenharmony_ci    /* Reset context for second run */
218a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_free(&ctx);
219a8e1175bSopenharmony_ci
220a8e1175bSopenharmony_ci    TEST_ASSERT(memcmp(my_output, output->x, output->len) == 0);
221a8e1175bSopenharmony_ci
222a8e1175bSopenharmony_ci    /* And now the normal entropy-based variant */
223a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_seed(&ctx, md_info, mbedtls_test_entropy_func, &p_entropy,
224a8e1175bSopenharmony_ci                                       custom->x, custom->len) == 0);
225a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
226a8e1175bSopenharmony_ci                                                  add1->x, add1->len) == 0);
227a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
228a8e1175bSopenharmony_ci                                                  add2->x, add2->len) == 0);
229a8e1175bSopenharmony_ci    TEST_ASSERT(memcmp(my_output, output->x, output->len) == 0);
230a8e1175bSopenharmony_ci
231a8e1175bSopenharmony_ciexit:
232a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_free(&ctx);
233a8e1175bSopenharmony_ci    MD_PSA_DONE();
234a8e1175bSopenharmony_ci}
235a8e1175bSopenharmony_ci/* END_CASE */
236a8e1175bSopenharmony_ci
237a8e1175bSopenharmony_ci/* BEGIN_CASE */
238a8e1175bSopenharmony_civoid hmac_drbg_nopr(int md_alg, data_t *entropy, data_t *custom,
239a8e1175bSopenharmony_ci                    data_t *add1, data_t *add2, data_t *add3,
240a8e1175bSopenharmony_ci                    data_t *output)
241a8e1175bSopenharmony_ci{
242a8e1175bSopenharmony_ci    unsigned char my_output[512];
243a8e1175bSopenharmony_ci    entropy_ctx p_entropy;
244a8e1175bSopenharmony_ci    const mbedtls_md_info_t *md_info;
245a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_context ctx;
246a8e1175bSopenharmony_ci
247a8e1175bSopenharmony_ci    MD_PSA_INIT();
248a8e1175bSopenharmony_ci
249a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_init(&ctx);
250a8e1175bSopenharmony_ci
251a8e1175bSopenharmony_ci    p_entropy.p = entropy->x;
252a8e1175bSopenharmony_ci    p_entropy.len = entropy->len;
253a8e1175bSopenharmony_ci
254a8e1175bSopenharmony_ci    md_info = mbedtls_md_info_from_type(md_alg);
255a8e1175bSopenharmony_ci    TEST_ASSERT(md_info != NULL);
256a8e1175bSopenharmony_ci
257a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_seed(&ctx, md_info, mbedtls_test_entropy_func, &p_entropy,
258a8e1175bSopenharmony_ci                                       custom->x, custom->len) == 0);
259a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_reseed(&ctx, add1->x, add1->len) == 0);
260a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
261a8e1175bSopenharmony_ci                                                  add2->x, add2->len) == 0);
262a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
263a8e1175bSopenharmony_ci                                                  add3->x, add3->len) == 0);
264a8e1175bSopenharmony_ci
265a8e1175bSopenharmony_ci    TEST_ASSERT(memcmp(my_output, output->x, output->len) == 0);
266a8e1175bSopenharmony_ci
267a8e1175bSopenharmony_ciexit:
268a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_free(&ctx);
269a8e1175bSopenharmony_ci    MD_PSA_DONE();
270a8e1175bSopenharmony_ci}
271a8e1175bSopenharmony_ci/* END_CASE */
272a8e1175bSopenharmony_ci
273a8e1175bSopenharmony_ci/* BEGIN_CASE */
274a8e1175bSopenharmony_civoid hmac_drbg_pr(int md_alg, data_t *entropy, data_t *custom,
275a8e1175bSopenharmony_ci                  data_t *add1, data_t *add2, data_t *output)
276a8e1175bSopenharmony_ci{
277a8e1175bSopenharmony_ci    unsigned char my_output[512];
278a8e1175bSopenharmony_ci    entropy_ctx p_entropy;
279a8e1175bSopenharmony_ci    const mbedtls_md_info_t *md_info;
280a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_context ctx;
281a8e1175bSopenharmony_ci
282a8e1175bSopenharmony_ci    MD_PSA_INIT();
283a8e1175bSopenharmony_ci
284a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_init(&ctx);
285a8e1175bSopenharmony_ci
286a8e1175bSopenharmony_ci    p_entropy.p = entropy->x;
287a8e1175bSopenharmony_ci    p_entropy.len = entropy->len;
288a8e1175bSopenharmony_ci
289a8e1175bSopenharmony_ci    md_info = mbedtls_md_info_from_type(md_alg);
290a8e1175bSopenharmony_ci    TEST_ASSERT(md_info != NULL);
291a8e1175bSopenharmony_ci
292a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_seed(&ctx, md_info, mbedtls_test_entropy_func, &p_entropy,
293a8e1175bSopenharmony_ci                                       custom->x, custom->len) == 0);
294a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_set_prediction_resistance(&ctx, MBEDTLS_HMAC_DRBG_PR_ON);
295a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
296a8e1175bSopenharmony_ci                                                  add1->x, add1->len) == 0);
297a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_random_with_add(&ctx, my_output, output->len,
298a8e1175bSopenharmony_ci                                                  add2->x, add2->len) == 0);
299a8e1175bSopenharmony_ci
300a8e1175bSopenharmony_ci    TEST_ASSERT(memcmp(my_output, output->x, output->len) == 0);
301a8e1175bSopenharmony_ci
302a8e1175bSopenharmony_ciexit:
303a8e1175bSopenharmony_ci    mbedtls_hmac_drbg_free(&ctx);
304a8e1175bSopenharmony_ci    MD_PSA_DONE();
305a8e1175bSopenharmony_ci}
306a8e1175bSopenharmony_ci/* END_CASE */
307a8e1175bSopenharmony_ci
308a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
309a8e1175bSopenharmony_civoid hmac_drbg_selftest()
310a8e1175bSopenharmony_ci{
311a8e1175bSopenharmony_ci    MD_PSA_INIT();
312a8e1175bSopenharmony_ci
313a8e1175bSopenharmony_ci    TEST_ASSERT(mbedtls_hmac_drbg_self_test(1) == 0);
314a8e1175bSopenharmony_ci
315a8e1175bSopenharmony_ciexit:
316a8e1175bSopenharmony_ci    MD_PSA_DONE();
317a8e1175bSopenharmony_ci}
318a8e1175bSopenharmony_ci/* END_CASE */
319