1 /*
2 * Copyright (c) 2022 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <zephyr/ztest.h>
8 #include <zephyr/crypto/crypto.h>
9 #include <zephyr/kernel.h>
10 #include <zephyr/device.h>
11
12 #ifdef CONFIG_CRYPTO_MBEDTLS_SHIM
13 #define CRYPTO_DRV_NAME CONFIG_CRYPTO_MBEDTLS_SHIM_DRV_NAME
14 #elif DT_HAS_COMPAT_STATUS_OKAY(renesas_smartbond_crypto)
15 #define CRYPTO_DEV_COMPAT renesas_smartbond_crypto
16 #elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32_hash)
17 #define CRYPTO_DEV_COMPAT st_stm32_hash
18 #else
19 #error "You need to enable one crypto device"
20 #endif
21
22 /* Following test are part of mbedTLS */
23
24 uint8_t test1[] = {};
25 uint8_t test2[] = {0xbd};
26 uint8_t test3[] = {0x5f, 0xd4};
27 uint8_t test4[] = {0xb0, 0xbd, 0x69};
28 uint8_t test5[] = {0xc9, 0x8c, 0x8e, 0x55};
29 uint8_t test6[] = {0x81, 0xa7, 0x23, 0xd9, 0x66};
30 uint8_t test7[] = {
31 0x83, 0x90, 0xcf, 0x0b, 0xe0, 0x76, 0x61, 0xcc, 0x76, 0x69, 0xaa, 0xc5,
32 0x4c, 0xe0, 0x9a, 0x37, 0x73, 0x3a, 0x62, 0x9d, 0x45, 0xf5, 0xd9, 0x83,
33 0xef, 0x20, 0x1f, 0x9b, 0x2d, 0x13, 0x80, 0x0e, 0x55, 0x5d, 0x9b, 0x10,
34 0x97, 0xfe, 0xc3, 0xb7, 0x83, 0xd7, 0xa5, 0x0d, 0xcb, 0x5e, 0x2b, 0x64,
35 0x4b, 0x96, 0xa1, 0xe9, 0x46, 0x3f, 0x17, 0x7c, 0xf3, 0x49, 0x06, 0xbf,
36 0x38, 0x8f, 0x36, 0x6d, 0xb5, 0xc2, 0xde, 0xee, 0x04, 0xa3, 0x0e, 0x28,
37 0x3f, 0x76, 0x4a, 0x97, 0xc3, 0xb3, 0x77, 0xa0, 0x34, 0xfe, 0xfc, 0x22,
38 0xc2, 0x59, 0x21, 0x4f, 0xaa, 0x99, 0xba, 0xba, 0xff, 0x16, 0x0a, 0xb0,
39 0xaa, 0xa7, 0xe2, 0xcc, 0xb0, 0xce, 0x09, 0xc6, 0xb3, 0x2f, 0xe0, 0x8c,
40 0xbc, 0x47, 0x46, 0x94, 0x37, 0x5a, 0xba, 0x70, 0x3f, 0xad, 0xbf, 0xa3,
41 0x1c, 0xf6, 0x85, 0xb3, 0x0a, 0x11, 0xc5, 0x7f, 0x3c, 0xf4, 0xed, 0xd3,
42 0x21, 0xe5, 0x7d, 0x3a, 0xe6, 0xeb, 0xb1, 0x13, 0x3c, 0x82, 0x60, 0xe7,
43 0x5b, 0x92, 0x24, 0xfa, 0x47, 0xa2, 0xbb, 0x20, 0x52, 0x49, 0xad, 0xd2,
44 0xe2, 0xe6, 0x2f, 0x81, 0x74, 0x91, 0x48, 0x2a, 0xe1, 0x52, 0x32, 0x2b,
45 0xe0, 0x90, 0x03, 0x55, 0xcd, 0xcc, 0x8d, 0x42, 0xa9, 0x8f, 0x82, 0xe9,
46 0x61, 0xa0, 0xdc, 0x6f, 0x53, 0x7b, 0x7b, 0x41, 0x0e, 0xff, 0x10, 0x5f,
47 0x59, 0x67, 0x3b, 0xfb, 0x78, 0x7b, 0xf0, 0x42, 0xaa, 0x07, 0x1f, 0x7a,
48 0xf6, 0x8d, 0x94, 0x4d, 0x27, 0x37, 0x1c, 0x64, 0x16, 0x0f, 0xe9, 0x38,
49 0x27, 0x72, 0x37, 0x25, 0x16, 0xc2, 0x30, 0xc1, 0xf4, 0x5c, 0x0d, 0x6b,
50 0x6c, 0xca, 0x7f, 0x27, 0x4b, 0x39, 0x4d, 0xa9, 0x40, 0x2d, 0x3e, 0xaf,
51 0xdf, 0x73, 0x39, 0x94, 0xec, 0x58, 0xab, 0x22, 0xd7, 0x18, 0x29, 0xa9,
52 0x83, 0x99, 0x57, 0x4d, 0x4b, 0x59, 0x08, 0xa4, 0x47, 0xa5, 0xa6, 0x81,
53 0xcb, 0x0d, 0xd5, 0x0a, 0x31, 0x14, 0x53, 0x11, 0xd9, 0x2c, 0x22, 0xa1,
54 0x6d, 0xe1, 0xea, 0xd6, 0x6a, 0x54, 0x99, 0xf2, 0xdc, 0xeb, 0x4c, 0xae,
55 0x69, 0x47, 0x72, 0xce, 0x90, 0x76, 0x2e, 0xf8, 0x33, 0x6a, 0xfe, 0xc6,
56 0x53, 0xaa, 0x9b, 0x1a, 0x1c, 0x48, 0x20, 0xb2, 0x21, 0x13, 0x6d, 0xfc,
57 0xe8, 0x0d, 0xce, 0x2b, 0xa9, 0x20, 0xd8, 0x8a, 0x53, 0x0c, 0x94, 0x10,
58 0xd0, 0xa4, 0xe0, 0x35, 0x8a, 0x3a, 0x11, 0x05, 0x2e, 0x58, 0xdd, 0x73,
59 0xb0, 0xb1, 0x79, 0xef, 0x8f, 0x56, 0xfe, 0x3b, 0x5a, 0x2d, 0x11, 0x7a,
60 0x73, 0xa0, 0xc3, 0x8a, 0x13, 0x92, 0xb6, 0x93, 0x8e, 0x97, 0x82, 0xe0,
61 0xd8, 0x64, 0x56, 0xee, 0x48, 0x84, 0xe3, 0xc3, 0x9d, 0x4d, 0x75, 0x81,
62 0x3f, 0x13, 0x63, 0x3b, 0xc7, 0x9b, 0xaa, 0x07, 0xc0, 0xd2, 0xd5, 0x55,
63 0xaf, 0xbf, 0x20, 0x7f, 0x52, 0xb7, 0xdc, 0xa1, 0x26, 0xd0, 0x15, 0xaa,
64 0x2b, 0x98, 0x73, 0xb3, 0xeb, 0x06, 0x5e, 0x90, 0xb9, 0xb0, 0x65, 0xa5,
65 0x37, 0x3f, 0xe1, 0xfb, 0x1b, 0x20, 0xd5, 0x94, 0x32, 0x7d, 0x19, 0xfb,
66 0xa5, 0x6c, 0xb8, 0x1e, 0x7b, 0x66, 0x96, 0x60, 0x5f, 0xfa, 0x56, 0xeb,
67 0xa3, 0xc2, 0x7a, 0x43, 0x86, 0x97, 0xcc, 0x21, 0xb2, 0x01, 0xfd, 0x7e,
68 0x09, 0xf1, 0x8d, 0xee, 0xa1, 0xb3, 0xea, 0x2f, 0x0d, 0x1e, 0xdc, 0x02,
69 0xdf, 0x0e, 0x20, 0x39, 0x6a, 0x14, 0x54, 0x12, 0xcd, 0x6b, 0x13, 0xc3,
70 0x2d, 0x2e, 0x60, 0x56, 0x41, 0xc9, 0x48, 0xb7, 0x14, 0xae, 0xc3, 0x0c,
71 0x06, 0x49, 0xdc, 0x44, 0x14, 0x35, 0x11, 0xf3, 0x5a, 0xb0, 0xfd, 0x5d,
72 0xd6, 0x4c, 0x34, 0xd0, 0x6f, 0xe8, 0x6f, 0x38, 0x36, 0xdf, 0xe9, 0xed,
73 0xeb, 0x7f, 0x08, 0xcf, 0xc3, 0xbd, 0x40, 0x95, 0x68, 0x26, 0x35, 0x62,
74 0x42, 0x19, 0x1f, 0x99, 0xf5, 0x34, 0x73, 0xf3, 0x2b, 0x0c, 0xc0, 0xcf,
75 0x93, 0x21, 0xd6, 0xc9, 0x2a, 0x11, 0x2e, 0x8d, 0xb9, 0x0b, 0x86, 0xee,
76 0x9e, 0x87, 0xcc, 0x32, 0xd0, 0x34, 0x3d, 0xb0, 0x1e, 0x32, 0xce, 0x9e,
77 0xb7, 0x82, 0xcb, 0x24, 0xef, 0xbb, 0xbe, 0xb4, 0x40, 0xfe, 0x92, 0x9e,
78 0x8f, 0x2b, 0xf8, 0xdf, 0xb1, 0x55, 0x0a, 0x3a, 0x2e, 0x74, 0x2e, 0x8b,
79 0x45, 0x5a, 0x3e, 0x57, 0x30, 0xe9, 0xe6, 0xa7, 0xa9, 0x82, 0x4d, 0x17,
80 0xac, 0xc0, 0xf7, 0x2a, 0x7f, 0x67, 0xea, 0xe0, 0xf0, 0x97, 0x0f, 0x8b,
81 0xde, 0x46, 0xdc, 0xde, 0xfa, 0xed, 0x30, 0x47, 0xcf, 0x80, 0x7e, 0x7f,
82 0x00, 0xa4, 0x2e, 0x5f, 0xd1, 0x1d, 0x40, 0xf5, 0xe9, 0x85, 0x33, 0xd7,
83 0x57, 0x44, 0x25, 0xb7, 0xd2, 0xbc, 0x3b, 0x38, 0x45, 0xc4, 0x43, 0x00,
84 0x8b, 0x58, 0x98, 0x0e, 0x76, 0x8e, 0x46, 0x4e, 0x17, 0xcc, 0x6f, 0x6b,
85 0x39, 0x39, 0xee, 0xe5, 0x2f, 0x71, 0x39, 0x63, 0xd0, 0x7d, 0x8c, 0x4a,
86 0xbf, 0x02, 0x44, 0x8e, 0xf0, 0xb8, 0x89, 0xc9, 0x67, 0x1e, 0x2f, 0x8a,
87 0x43, 0x6d, 0xde, 0xef, 0xfc, 0xca, 0x71, 0x76, 0xe9, 0xbf, 0x9d, 0x10,
88 0x05, 0xec, 0xd3, 0x77, 0xf2, 0xfa, 0x67, 0xc2, 0x3e, 0xd1, 0xf1, 0x37,
89 0xe6, 0x0b, 0xf4, 0x60, 0x18, 0xa8, 0xbd, 0x61, 0x3d, 0x03, 0x8e, 0x88,
90 0x37, 0x04, 0xfc, 0x26, 0xe7, 0x98, 0x96, 0x9d, 0xf3, 0x5e, 0xc7, 0xbb,
91 0xc6, 0xa4, 0xfe, 0x46, 0xd8, 0x91, 0x0b, 0xd8, 0x2f, 0xa3, 0xcd, 0xed,
92 0x26, 0x5d, 0x0a, 0x3b, 0x6d, 0x39, 0x9e, 0x42, 0x51, 0xe4, 0xd8, 0x23,
93 0x3d, 0xaa, 0x21, 0xb5, 0x81, 0x2f, 0xde, 0xd6, 0x53, 0x61, 0x98, 0xff,
94 0x13, 0xaa, 0x5a, 0x1c, 0xd4, 0x6a, 0x5b, 0x9a, 0x17, 0xa4, 0xdd, 0xc1,
95 0xd9, 0xf8, 0x55, 0x44, 0xd1, 0xd1, 0xcc, 0x16, 0xf3, 0xdf, 0x85, 0x80,
96 0x38, 0xc8, 0xe0, 0x71, 0xa1, 0x1a, 0x7e, 0x15, 0x7a, 0x85, 0xa6, 0xa8,
97 0xdc, 0x47, 0xe8, 0x8d, 0x75, 0xe7, 0x00, 0x9a, 0x8b, 0x26, 0xfd, 0xb7,
98 0x3f, 0x33, 0xa2, 0xa7, 0x0f, 0x1e, 0x0c, 0x25, 0x9f, 0x8f, 0x95, 0x33,
99 0xb9, 0xb8, 0xf9, 0xaf, 0x92, 0x88, 0xb7, 0x27, 0x4f, 0x21, 0xba, 0xee,
100 0xc7, 0x8d, 0x39, 0x6f, 0x8b, 0xac, 0xdc, 0xc2, 0x24, 0x71, 0x20, 0x7d,
101 0x9b, 0x4e, 0xfc, 0xcd, 0x3f, 0xed, 0xc5, 0xc5, 0xa2, 0x21, 0x4f, 0xf5,
102 0xe5, 0x1c, 0x55, 0x3f, 0x35, 0xe2, 0x1a, 0xe6, 0x96, 0xfe, 0x51, 0xe8,
103 0xdf, 0x73, 0x3a, 0x8e, 0x06, 0xf5, 0x0f, 0x41, 0x9e, 0x59, 0x9e, 0x9f,
104 0x9e, 0x4b, 0x37, 0xce, 0x64, 0x3f, 0xc8, 0x10, 0xfa, 0xaa, 0x47, 0x98,
105 0x97, 0x71, 0x50, 0x9d, 0x69, 0xa1, 0x10, 0xac, 0x91, 0x62, 0x61, 0x42,
106 0x70, 0x26, 0x36, 0x9a, 0x21, 0x26, 0x3a, 0xc4, 0x46, 0x0f, 0xb4, 0xf7,
107 0x08, 0xf8, 0xae, 0x28, 0x59, 0x98, 0x56, 0xdb, 0x7c, 0xb6, 0xa4, 0x3a,
108 0xc8, 0xe0, 0x3d, 0x64, 0xa9, 0x60, 0x98, 0x07, 0xe7, 0x6c, 0x5f, 0x31,
109 0x2b, 0x9d, 0x18, 0x63, 0xbf, 0xa3, 0x04, 0xe8, 0x95, 0x36, 0x47, 0x64,
110 0x8b, 0x4f, 0x4a, 0xb0, 0xed, 0x99, 0x5e
111 };
112
113 uint8_t sha256_results[7][32] = {
114 {0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8,
115 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c,
116 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55},
117 {0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b,
118 0x31, 0x3d, 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa,
119 0xe1, 0x12, 0x04, 0xc0, 0x8f, 0xfe, 0x73, 0x2b},
120 {0x7c, 0x4f, 0xbf, 0x48, 0x44, 0x98, 0xd2, 0x1b, 0x48, 0x7b, 0x9d, 0x61,
121 0xde, 0x89, 0x14, 0xb2, 0xea, 0xda, 0xf2, 0x69, 0x87, 0x12, 0x93, 0x6d,
122 0x47, 0xc3, 0xad, 0xa2, 0x55, 0x8f, 0x67, 0x88},
123 {0x40, 0x96, 0x80, 0x42, 0x21, 0x09, 0x3d, 0xdc, 0xcf, 0xbf, 0x46, 0x83,
124 0x14, 0x90, 0xea, 0x63, 0xe9, 0xe9, 0x94, 0x14, 0x85, 0x8f, 0x8d, 0x75,
125 0xff, 0x7f, 0x64, 0x2c, 0x7c, 0xa6, 0x18, 0x03},
126 {0x7a, 0xbc, 0x22, 0xc0, 0xae, 0x5a, 0xf2, 0x6c, 0xe9, 0x3d, 0xbb, 0x94,
127 0x43, 0x3a, 0x0e, 0x0b, 0x2e, 0x11, 0x9d, 0x01, 0x4f, 0x8e, 0x7f, 0x65,
128 0xbd, 0x56, 0xc6, 0x1c, 0xcc, 0xcd, 0x95, 0x04},
129 {0x75, 0x16, 0xfb, 0x8b, 0xb1, 0x13, 0x50, 0xdf, 0x2b, 0xf3, 0x86, 0xbc,
130 0x3c, 0x33, 0xbd, 0x0f, 0x52, 0xcb, 0x4c, 0x67, 0xc6, 0xe4, 0x74, 0x5e,
131 0x04, 0x88, 0xe6, 0x2c, 0x2a, 0xea, 0x26, 0x05},
132 {0x41, 0x09, 0xcd, 0xbe, 0xc3, 0x24, 0x0a, 0xd7, 0x4c, 0xc6, 0xc3, 0x7f,
133 0x39, 0x30, 0x0f, 0x70, 0xfe, 0xde, 0x16, 0xe2, 0x1e, 0xfc, 0x77, 0xf7,
134 0x86, 0x59, 0x98, 0x71, 0x4a, 0xad, 0x0b, 0x5e}
135 };
136
ZTEST_USER(crypto_hash,test_hash)137 ZTEST_USER(crypto_hash, test_hash)
138 {
139 int ret;
140 struct hash_ctx ctx;
141
142 #ifdef CRYPTO_DRV_NAME
143 const struct device *dev = device_get_binding(CRYPTO_DRV_NAME);
144
145 if (!dev) {
146 zassert(0, "Crypto device is not ready");
147 }
148 #else
149 const struct device *dev = DEVICE_DT_GET_ONE(CRYPTO_DEV_COMPAT);
150
151 if (!device_is_ready(dev)) {
152 zassert(0, "Crypto device is not ready");
153 }
154 #endif
155
156 ctx.flags = CAP_SYNC_OPS | CAP_SEPARATE_IO_BUFS;
157
158 ret = hash_begin_session(dev, &ctx, CRYPTO_HASH_ALGO_SHA256);
159 zassert_true(ret == 0, "Failed to init sha256 session");
160
161 #define TEST_HASH(_i) \
162 do { \
163 uint8_t out_buf[32] = {0}; \
164 struct hash_pkt pkt = { \
165 .in_buf = test ## _i, \
166 .in_len = sizeof(test ## _i), \
167 .out_buf = out_buf, \
168 }; \
169 ret = hash_compute(&ctx, &pkt); \
170 zassert_true(ret == 0, "Failed to compute hash for test " #_i); \
171 ret = memcmp(pkt.out_buf, sha256_results[_i - 1], 32); \
172 zassert_true(ret == 0, "Failed to compute hash for test " #_i); \
173 } while (0)
174
175
176 TEST_HASH(1);
177 TEST_HASH(2);
178 TEST_HASH(3);
179 TEST_HASH(4);
180 TEST_HASH(5);
181 TEST_HASH(6);
182 TEST_HASH(7);
183
184 hash_free_session(dev, &ctx);
185 }
186
187 ZTEST_SUITE(crypto_hash, NULL, NULL, NULL, NULL, NULL);
188