Skip to content

Commit 09dc9dc

Browse files
rettichschnididkalowsk
authored andcommitted
samples: drivers: crypto: Align buffers
This change extends what e1e1973 (samples: drivers: crypto: Aligned AES key) has started: For certain architectures (i.e. Si32), the alignment of the used buffers is important as the AES HW engine uses DMA and inherits its restrictions. Signed-off-by: Reto Schneider <[email protected]>
1 parent 8334540 commit 09dc9dc

File tree

1 file changed

+19
-16
lines changed
  • samples/drivers/crypto/src

1 file changed

+19
-16
lines changed

samples/drivers/crypto/src/main.c

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,15 @@ LOG_MODULE_REGISTER(main);
3737
#error "You need to enable one crypto device"
3838
#endif
3939

40-
const static uint8_t key[16] __aligned(4) = {
40+
/* Some crypto drivers require IO buffers to be aligned, i.e. due to underlying DMA requirements. */
41+
#define IO_ALIGNMENT_BYTES 4
42+
43+
const static uint8_t key[16] __aligned(IO_ALIGNMENT_BYTES) = {
4144
0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88,
4245
0x09, 0xcf, 0x4f, 0x3c
4346
};
4447

45-
static uint8_t plaintext[64] = {
48+
static uint8_t plaintext[64] __aligned(IO_ALIGNMENT_BYTES) = {
4649
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11,
4750
0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
4851
0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46,
@@ -119,17 +122,17 @@ void ecb_mode(const struct device *dev)
119122
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
120123
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
121124
};
122-
uint8_t ecb_plaintext[16] = {
125+
uint8_t ecb_plaintext[16] __aligned(IO_ALIGNMENT_BYTES) = {
123126
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
124127
0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
125128
};
126-
uint8_t ecb_ciphertext[16] = {
129+
uint8_t ecb_ciphertext[16] __aligned(IO_ALIGNMENT_BYTES) = {
127130
0x69, 0xC4, 0xE0, 0xD8, 0x6A, 0x7B, 0x04, 0x30,
128131
0xD8, 0xCD, 0xB7, 0x80, 0x70, 0xB4, 0xC5, 0x5A
129132
};
130133

131-
uint8_t encrypted[16] = {0};
132-
uint8_t decrypted[16] = {0};
134+
uint8_t encrypted[16] __aligned(IO_ALIGNMENT_BYTES) = {0};
135+
uint8_t decrypted[16] __aligned(IO_ALIGNMENT_BYTES) = {0};
133136
struct cipher_ctx ini = {
134137
.keylen = sizeof(ecb_key),
135138
.key.bit_stream = ecb_key,
@@ -210,8 +213,8 @@ static const uint8_t cbc_ciphertext[80] = {
210213

211214
void cbc_mode(const struct device *dev)
212215
{
213-
uint8_t encrypted[80] = {0};
214-
uint8_t decrypted[64] = {0};
216+
uint8_t encrypted[80] __aligned(IO_ALIGNMENT_BYTES) = {0};
217+
uint8_t decrypted[64] __aligned(IO_ALIGNMENT_BYTES) = {0};
215218
struct cipher_ctx ini = {
216219
.keylen = sizeof(key),
217220
.key.bit_stream = key,
@@ -299,8 +302,8 @@ static const uint8_t ctr_ciphertext[64] = {
299302

300303
void ctr_mode(const struct device *dev)
301304
{
302-
uint8_t encrypted[64] = {0};
303-
uint8_t decrypted[64] = {0};
305+
uint8_t encrypted[64] __aligned(IO_ALIGNMENT_BYTES) = {0};
306+
uint8_t decrypted[64] __aligned(IO_ALIGNMENT_BYTES) = {0};
304307
struct cipher_ctx ini = {
305308
.keylen = sizeof(key),
306309
.key.bit_stream = key,
@@ -387,7 +390,7 @@ static uint8_t ccm_nonce[13] = {
387390
static uint8_t ccm_hdr[8] = {
388391
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
389392
};
390-
static uint8_t ccm_data[23] = {
393+
static uint8_t ccm_data[23] __aligned(IO_ALIGNMENT_BYTES) = {
391394
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
392395
0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e
393396
};
@@ -399,8 +402,8 @@ static const uint8_t ccm_expected[31] = {
399402

400403
void ccm_mode(const struct device *dev)
401404
{
402-
uint8_t encrypted[50];
403-
uint8_t decrypted[25];
405+
uint8_t encrypted[50] __aligned(IO_ALIGNMENT_BYTES);
406+
uint8_t decrypted[25] __aligned(IO_ALIGNMENT_BYTES);
404407
struct cipher_ctx ini = {
405408
.keylen = sizeof(ccm_key),
406409
.key.bit_stream = ccm_key,
@@ -499,7 +502,7 @@ static uint8_t gcm_hdr[20] = {
499502
0xe2, 0x01, 0x06, 0xd7, 0xcd, 0x0d, 0xf0, 0x76, 0x1e, 0x8d, 0xcd, 0x3d,
500503
0x88, 0xe5, 0x4c, 0x2a, 0x76, 0xd4, 0x57, 0xed
501504
};
502-
static uint8_t gcm_data[42] = {
505+
static uint8_t gcm_data[42] __aligned(IO_ALIGNMENT_BYTES) = {
503506
0x08, 0x00, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
504507
0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24,
505508
0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
@@ -516,8 +519,8 @@ static const uint8_t gcm_expected[58] = {
516519

517520
void gcm_mode(const struct device *dev)
518521
{
519-
uint8_t encrypted[60] = {0};
520-
uint8_t decrypted[44] = {0};
522+
uint8_t encrypted[60] __aligned(IO_ALIGNMENT_BYTES) = {0};
523+
uint8_t decrypted[44] __aligned(IO_ALIGNMENT_BYTES) = {0};
521524
struct cipher_ctx ini = {
522525
.keylen = sizeof(gcm_key),
523526
.key.bit_stream = gcm_key,

0 commit comments

Comments
 (0)