xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_chacha20.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */
2*62c56f98SSadaf Ebrahimi#include "mbedtls/chacha20.h"
3*62c56f98SSadaf Ebrahimi/* END_HEADER */
4*62c56f98SSadaf Ebrahimi
5*62c56f98SSadaf Ebrahimi/* BEGIN_DEPENDENCIES
6*62c56f98SSadaf Ebrahimi * depends_on:MBEDTLS_CHACHA20_C
7*62c56f98SSadaf Ebrahimi * END_DEPENDENCIES
8*62c56f98SSadaf Ebrahimi */
9*62c56f98SSadaf Ebrahimi
10*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
11*62c56f98SSadaf Ebrahimivoid chacha20_crypt(data_t *key_str,
12*62c56f98SSadaf Ebrahimi                    data_t *nonce_str,
13*62c56f98SSadaf Ebrahimi                    int counter,
14*62c56f98SSadaf Ebrahimi                    data_t *src_str,
15*62c56f98SSadaf Ebrahimi                    data_t *expected_output_str)
16*62c56f98SSadaf Ebrahimi{
17*62c56f98SSadaf Ebrahimi    unsigned char output[375];
18*62c56f98SSadaf Ebrahimi    mbedtls_chacha20_context ctx;
19*62c56f98SSadaf Ebrahimi
20*62c56f98SSadaf Ebrahimi    memset(output, 0x00, sizeof(output));
21*62c56f98SSadaf Ebrahimi
22*62c56f98SSadaf Ebrahimi    TEST_ASSERT(src_str->len   == expected_output_str->len);
23*62c56f98SSadaf Ebrahimi    TEST_ASSERT(key_str->len   == 32U);
24*62c56f98SSadaf Ebrahimi    TEST_ASSERT(nonce_str->len == 12U);
25*62c56f98SSadaf Ebrahimi
26*62c56f98SSadaf Ebrahimi    /*
27*62c56f98SSadaf Ebrahimi     * Test the integrated API
28*62c56f98SSadaf Ebrahimi     */
29*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_crypt(key_str->x, nonce_str->x, counter, src_str->len, src_str->x,
30*62c56f98SSadaf Ebrahimi                                       output) == 0);
31*62c56f98SSadaf Ebrahimi
32*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(output, expected_output_str->len,
33*62c56f98SSadaf Ebrahimi                        expected_output_str->x, expected_output_str->len);
34*62c56f98SSadaf Ebrahimi
35*62c56f98SSadaf Ebrahimi    /*
36*62c56f98SSadaf Ebrahimi     * Test the streaming API
37*62c56f98SSadaf Ebrahimi     */
38*62c56f98SSadaf Ebrahimi    mbedtls_chacha20_init(&ctx);
39*62c56f98SSadaf Ebrahimi
40*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_setkey(&ctx, key_str->x) == 0);
41*62c56f98SSadaf Ebrahimi
42*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_starts(&ctx, nonce_str->x, counter) == 0);
43*62c56f98SSadaf Ebrahimi
44*62c56f98SSadaf Ebrahimi    memset(output, 0x00, sizeof(output));
45*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_update(&ctx, src_str->len, src_str->x, output) == 0);
46*62c56f98SSadaf Ebrahimi
47*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(output, expected_output_str->len,
48*62c56f98SSadaf Ebrahimi                        expected_output_str->x, expected_output_str->len);
49*62c56f98SSadaf Ebrahimi
50*62c56f98SSadaf Ebrahimi    /*
51*62c56f98SSadaf Ebrahimi     * Test the streaming API again, piecewise
52*62c56f98SSadaf Ebrahimi     */
53*62c56f98SSadaf Ebrahimi
54*62c56f98SSadaf Ebrahimi    /* Don't free/init the context nor set the key again,
55*62c56f98SSadaf Ebrahimi     * in order to test that starts() does the right thing. */
56*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_starts(&ctx, nonce_str->x, counter) == 0);
57*62c56f98SSadaf Ebrahimi
58*62c56f98SSadaf Ebrahimi    memset(output, 0x00, sizeof(output));
59*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_update(&ctx, 1, src_str->x, output) == 0);
60*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_update(&ctx, src_str->len - 1,
61*62c56f98SSadaf Ebrahimi                                        src_str->x + 1, output + 1) == 0);
62*62c56f98SSadaf Ebrahimi
63*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(output, expected_output_str->len,
64*62c56f98SSadaf Ebrahimi                        expected_output_str->x, expected_output_str->len);
65*62c56f98SSadaf Ebrahimi
66*62c56f98SSadaf Ebrahimi    mbedtls_chacha20_free(&ctx);
67*62c56f98SSadaf Ebrahimi}
68*62c56f98SSadaf Ebrahimi/* END_CASE */
69*62c56f98SSadaf Ebrahimi
70*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
71*62c56f98SSadaf Ebrahimivoid chacha20_self_test()
72*62c56f98SSadaf Ebrahimi{
73*62c56f98SSadaf Ebrahimi    TEST_ASSERT(mbedtls_chacha20_self_test(1) == 0);
74*62c56f98SSadaf Ebrahimi}
75*62c56f98SSadaf Ebrahimi/* END_CASE */
76