1 /*
2 * Copyright (c) 2017-2024 Nordic Semiconductor ASA
3 * Copyright (c) 2015 Runtime Inc
4 * Copyright (c) 2020 Gerson Fernando Budke <nandojve@gmail.com>
5 * Copyright 2024 NXP
6 *
7 * SPDX-License-Identifier: Apache-2.0
8 */
9
10 #include <zephyr/ztest.h>
11 #include <zephyr/drivers/flash.h>
12 #include <zephyr/storage/flash_map.h>
13
14 #define SLOT1_PARTITION slot1_partition
15 #define SLOT1_PARTITION_ID FIXED_PARTITION_ID(SLOT1_PARTITION)
16 #define SLOT1_PARTITION_DEV FIXED_PARTITION_DEVICE(SLOT1_PARTITION)
17 #define SLOT1_PARTITION_NODE DT_NODELABEL(SLOT1_PARTITION)
18 #define SLOT1_PARTITION_OFFSET FIXED_PARTITION_OFFSET(SLOT1_PARTITION)
19
ZTEST(flash_map_sha,test_flash_area_check_int_sha256)20 ZTEST(flash_map_sha, test_flash_area_check_int_sha256)
21 {
22 /* for i in {1..16}; do echo $'0123456789abcdef\nfedcba98765432' >> tst.sha; done
23 * hexdump tst.sha
24 */
25 uint8_t tst_vec[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
26 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
27 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
28 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
29 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
30 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
31 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
32 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
33 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
34 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
35 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
36 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
37 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
38 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
39 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
40 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
41 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
42 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
43 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
44 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
45 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
46 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
47 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
48 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
49 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
50 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
51 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
52 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
53 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
54 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
55 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
56 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
57 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
58 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
59 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
60 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
61 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
62 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
63 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
64 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
65 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
66 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
67 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
68 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
69 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
70 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
71 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
72 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
73 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
74 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
75 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
76 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
77 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
78 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
79 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
80 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
81 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
82 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
83 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
84 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a,
85 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
86 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
87 0x0a, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x39,
88 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x0a };
89 /* sha256sum tst.sha */
90 uint8_t tst_sha[] = { 0xae, 0xed, 0x7d, 0x59, 0x53, 0xbd, 0xb7, 0x28,
91 0x3e, 0x59, 0xc2, 0x65, 0x59, 0x62, 0xe3, 0x7e,
92 0xfa, 0x97, 0xbd, 0x76, 0xf6, 0xac, 0xc3, 0x92,
93 0x59, 0x48, 0x4e, 0xc0, 0xaf, 0xa8, 0x49, 0x65 };
94
95 const struct flash_area *fa;
96 struct flash_area_check fac = { NULL, 0, -1, NULL, 0 };
97 uint8_t buffer[16];
98 int rc;
99
100 rc = flash_area_open(SLOT1_PARTITION_ID, &fa);
101 zassert_true(rc == 0, "flash_area_open() fail, error %d\n", rc);
102 rc = flash_area_erase(fa, 0, fa->fa_size);
103 zassert_true(rc == 0, "Flash erase failure (%d), error %d\n", rc);
104 rc = flash_area_write(fa, 0, tst_vec, sizeof(tst_vec));
105 zassert_true(rc == 0, "Flash img write, error %d\n", rc);
106
107 rc = flash_area_check_int_sha256(NULL, NULL);
108 zassert_true(rc == -EINVAL, "Flash area check int 256 params 1, 2\n");
109 rc = flash_area_check_int_sha256(NULL, &fac);
110 zassert_true(rc == -EINVAL, "Flash area check int 256 params 2\n");
111 rc = flash_area_check_int_sha256(fa, NULL);
112 zassert_true(rc == -EINVAL, "Flash area check int 256 params 1\n");
113
114 rc = flash_area_check_int_sha256(fa, &fac);
115 zassert_true(rc == -EINVAL, "Flash area check int 256 fac match\n");
116 fac.match = tst_sha;
117 rc = flash_area_check_int_sha256(fa, &fac);
118 zassert_true(rc == -EINVAL, "Flash area check int 256 fac clen\n");
119 fac.clen = sizeof(tst_vec);
120 rc = flash_area_check_int_sha256(fa, &fac);
121 zassert_true(rc == -EINVAL, "Flash area check int 256 fac off\n");
122 fac.off = 0;
123 rc = flash_area_check_int_sha256(fa, &fac);
124 zassert_true(rc == -EINVAL, "Flash area check int 256 fac rbuf\n");
125 fac.rbuf = buffer;
126 rc = flash_area_check_int_sha256(fa, &fac);
127 zassert_true(rc == -EINVAL, "Flash area check int 256 fac rblen\n");
128 fac.rblen = sizeof(buffer);
129
130 rc = flash_area_check_int_sha256(fa, &fac);
131 zassert_true(rc == 0, "Flash area check int 256 OK, error %d\n", rc);
132 tst_sha[0] = 0x00;
133 rc = flash_area_check_int_sha256(fa, &fac);
134 zassert_false(rc == 0, "Flash area check int 256 wrong sha\n");
135
136 flash_area_close(fa);
137 }
138
139 ZTEST_SUITE(flash_map_sha, NULL, NULL, NULL, NULL, NULL);
140