From 177d81c8ad010de8a254da665a79ac148251cedc Mon Sep 17 00:00:00 2001 From: Mazet Laurent Date: Fri, 25 Apr 2025 00:28:14 +0200 Subject: [PATCH] update ICD to add AAD and TAG fields --- crypto/script-black.eth | 3 +-- crypto/script-red.eth | 2 +- crypto/script-secu.eth | 6 ++---- pdu_clear_data.c | 5 +++++ pdu_clear_data.h | 3 ++- pdu_encrypted_data.c | 15 ++++++++++----- pdu_encrypted_data.h | 5 +++-- script-cross_crypto.eth | 6 +++--- script-local_crypto.eth | 8 ++++---- 9 files changed, 31 insertions(+), 22 deletions(-) diff --git a/crypto/script-black.eth b/crypto/script-black.eth index 8d370b7..a1ab4d5 100644 --- a/crypto/script-black.eth +++ b/crypto/script-black.eth @@ -6,8 +6,7 @@ R:BYPASS BYPASSED_CROSS_ASYNC DATA="Radio\ Configuration" # send data -#R:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00 IV=@iv.txt DATA=@encryptred.txt -R:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 IV=@iv.txt DATA=@encrypted.txt +R:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00 IV=@iv.txt DATA=@encrypted.txt # wait SLEEP 1000 diff --git a/crypto/script-red.eth b/crypto/script-red.eth index d9e23bf..4557216 100644 --- a/crypto/script-red.eth +++ b/crypto/script-red.eth @@ -16,5 +16,5 @@ T:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=0 DATA=@plaintext.txt SLEEP 1000 # receive data -R:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 DATA=@decrypted.txt +R:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 DATA=@decrypted.txt diff --git a/crypto/script-secu.eth b/crypto/script-secu.eth index bfd6ef0..e57d73c 100644 --- a/crypto/script-secu.eth +++ b/crypto/script-secu.eth @@ -11,15 +11,13 @@ R:CONTROL STATUS_REQ T:CONTROL STATUS_RESP STATUS=4 # send data -#R:CROSS_CRYPTO_RED ENCRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 DATA=@plaintext.txt -R:CROSS_CRYPTO_RED ENCRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 DATA=@plaintext.txt +R:CROSS_CRYPTO_RED ENCRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 DATA=@plaintext.txt T:CROSS_CRYPTO_BLACK ENCRYPTED_CROSS_ASYNC CHANNELID=0 IV=@iv.txt DATA=@encrypted.txt # wait #SLEEP 1000 # receive data -#R:CROSS_CRYPTO_BLACK DECRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 ADD=00:00:00:00 IV=@iv.txt DATA=@encrypted.txt -R:CROSS_CRYPTO_BLACK DECRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 IV=@iv.txt DATA=@encrypted.txt +R:CROSS_CRYPTO_BLACK DECRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 IV=@iv.txt DATA=@encrypted.txt T:CROSS_CRYPTO_RED DECRYPTED_CROSS_ASYNC CHANNELID=0 DATA=@decrypted.txt diff --git a/pdu_clear_data.c b/pdu_clear_data.c index e8bdcde..80669b9 100644 --- a/pdu_clear_data.c +++ b/pdu_clear_data.c @@ -24,6 +24,7 @@ int parse_clear_data (char *line, CLEAR_DATA_t *out) PARSE_INT ("CHANNELID", out->channel_id) PARSE_INT ("BYPASSLEN", out->bypass_len) PARSE_ARRAY ("BYPASS", out->bypass, 1) + PARSE_TAB ("AAD", out->aad) PARSE_ARRAY ("DATA", out->data) END_PARSE () } @@ -34,6 +35,7 @@ int format_clear_data (CLEAR_DATA_t *in, char *buffer, int maxlen) FORMAT_INT ("CHANNELID", in->channel_id) FORMAT_INT ("BYPASSLEN", in->bypass_len) FORMAT_ARRAY ("BYPASS", in->bypass) + FORMAT_TAB ("AAD", in->aad) FORMAT_ARRAY ("DATA", in->data) END_FORMAT () } @@ -44,6 +46,7 @@ int serial_clear_data (CLEAR_DATA_t *in, uint8_t *buffer, int maxlen) SERIAL_INT ("CHANNELID", in->channel_id) SERIAL_INT ("BYPASSLEN", in->bypass_len) SERIAL_ARRAY ("BYPASS", in->bypass) + SERIAL_TAB ("AAD", in->aad) SERIAL_ARRAY ("DATA", in->data) END_SERIAL () } @@ -54,6 +57,7 @@ int deserial_clear_data (uint8_t *buffer, int len, CLEAR_DATA_t *out) DESERIAL_INT ("CHANNELID", out->channel_id) DESERIAL_INT ("BYPASSLEN", out->bypass_len) DESERIAL_ARRAY ("BYPASS", out->bypass, 1) + DESERIAL_TAB ("AAD", out->aad) DESERIAL_ARRAY ("DATA", out->data) END_DESERIAL () } @@ -64,6 +68,7 @@ int check_clear_data (CLEAR_DATA_t *first, CLEAR_DATA_t *second, int fields) CHECK_INT ("CHANNELID", first->channel_id, second->channel_id) CHECK_INT ("BYPASSLEN", first->bypass_len, second->bypass_len) CHECK_ARRAY ("BYPASS", first->bypass, second->bypass) + CHECK_TAB ("AAD", first->aad, second->aad) CHECK_ARRAY ("DATA", first->data, second->data) END_CHECK () } diff --git a/pdu_clear_data.h b/pdu_clear_data.h index af27aef..a3b6704 100644 --- a/pdu_clear_data.h +++ b/pdu_clear_data.h @@ -31,8 +31,9 @@ typedef struct { uint8_t channel_id; /**< channel index */ uint8_t bypass_len; /**< attached bypass message length */ uint8_t bypass[255]; /**< attached bypass message */ + uint8_t aad[4]; /**< additional authenticated data */ uint16_t data_len; /**< data length (must be aligned to 16 bytes) */ - uint8_t data[16 * ((MOREP_PAYLOAD - 14) / 16)]; /**< data message */ + uint8_t data[16 * ((MOREP_PAYLOAD - 34) / 16)]; /**< data message */ } CLEAR_DATA_t; /** diff --git a/pdu_encrypted_data.c b/pdu_encrypted_data.c index 3a5988a..c89d263 100644 --- a/pdu_encrypted_data.c +++ b/pdu_encrypted_data.c @@ -22,9 +22,10 @@ int parse_encrypted_data (char *line, ENCRYPTED_DATA_t *out) { BEGIN_PARSE (line) PARSE_INT ("CHANNELID", out->channel_id) - PARSE_TAB ("IV", out->iv) PARSE_INT ("BYPASSLEN", out->bypass_len) PARSE_ARRAY ("BYPASS", out->bypass, 1) + PARSE_TAB ("AAD", out->aad) + PARSE_TAB ("IV", out->iv) PARSE_ARRAY ("DATA", out->data) END_PARSE () } @@ -33,9 +34,10 @@ int format_encrypted_data (ENCRYPTED_DATA_t *in, char *buffer, int maxlen) { BEGIN_FORMAT (buffer, maxlen) FORMAT_INT ("CHANNELID", in->channel_id) - FORMAT_TAB ("IV", in->iv) FORMAT_INT ("BYPASSLEN", in->bypass_len) FORMAT_ARRAY ("BYPASS", in->bypass) + FORMAT_TAB ("AAD", in->aad) + FORMAT_TAB ("IV", in->iv) FORMAT_ARRAY ("DATA", in->data) END_FORMAT () } @@ -44,9 +46,10 @@ int serial_encrypted_data (ENCRYPTED_DATA_t *in, uint8_t *buffer, int maxlen) { BEGIN_SERIAL (buffer, maxlen) SERIAL_INT ("CHANNELID", in->channel_id) - SERIAL_TAB ("IV", in->iv) SERIAL_INT ("BYPASSLEN", in->bypass_len) SERIAL_ARRAY ("BYPASS", in->bypass) + SERIAL_TAB ("AAD", in->aad) + SERIAL_TAB ("IV", in->iv) SERIAL_ARRAY ("DATA", in->data) END_SERIAL () } @@ -55,9 +58,10 @@ int deserial_encrypted_data (uint8_t *buffer, int len, ENCRYPTED_DATA_t *out) { BEGIN_DESERIAL (buffer, len) DESERIAL_INT ("CHANNELID", out->channel_id) - DESERIAL_TAB ("IV", out->iv) DESERIAL_INT ("BYPASSLEN", out->bypass_len) DESERIAL_ARRAY ("BYPASS", out->bypass, 1) + DESERIAL_TAB ("AAD", out->aad) + DESERIAL_TAB ("IV", out->iv) DESERIAL_ARRAY ("DATA", out->data) END_DESERIAL () } @@ -66,9 +70,10 @@ int check_encrypted_data (ENCRYPTED_DATA_t *first, ENCRYPTED_DATA_t *second, int { BEGIN_CHECK (fields) CHECK_INT ("CHANNELID", first->channel_id, second->channel_id) - CHECK_TAB ("IV", first->iv, second->iv) CHECK_INT ("BYPASSLEN", first->bypass_len, second->bypass_len) CHECK_ARRAY ("BYPASS", first->bypass, second->bypass) + CHECK_TAB ("AAD", first->aad, second->aad) + CHECK_TAB ("IV", first->iv, second->iv) CHECK_ARRAY ("DATA", first->data, second->data) END_CHECK () } diff --git a/pdu_encrypted_data.h b/pdu_encrypted_data.h index 5ceb478..e933f6f 100644 --- a/pdu_encrypted_data.h +++ b/pdu_encrypted_data.h @@ -29,11 +29,12 @@ __BEGIN_DECLS */ typedef struct { uint8_t channel_id; /**< channel index */ - uint8_t iv[12]; /**< initial vector */ uint8_t bypass_len; /**< attached bypass message length */ uint8_t bypass[255]; /**< attached bypass message */ + uint8_t aad[4]; /**< additional authenticated data */ + uint8_t iv[12]; /**< initial vector */ uint16_t data_len; /**< data length (must be aligned to 16 bytes) */ - uint8_t data[16 * ((MOREP_PAYLOAD - 14) / 16)]; /**< data message */ + uint8_t data[16 * ((MOREP_PAYLOAD - 34 + 16) / 16)]; /**< data message + tag */ } ENCRYPTED_DATA_t; /** diff --git a/script-cross_crypto.eth b/script-cross_crypto.eth index 63cc8e5..84cc62f 100644 --- a/script-cross_crypto.eth +++ b/script-cross_crypto.eth @@ -1,10 +1,10 @@ # Cross crypto test script -T:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-local_crypto.eth -R:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 +T:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 AAD=01:02:03:04 DATA=@script-local_crypto.eth +R:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 AAD=01:02:03:04 T:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=9 BYPASSLEN=1 BYPASS=55 DATA=@script-local_crypto.eth -R:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC BYPASSLEN=1 BYPASS=55 +R:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC BYPASSLEN=1 BYPASS=55 DATA=@script-local_crypto.eth T:CROSS_CRYPTO DECRYPT_CROSS_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@script-local_crypto.eth R:CROSS_CRYPTO DECRYPT_CROSS_ASYNC DATA=@script-local_crypto.eth diff --git a/script-local_crypto.eth b/script-local_crypto.eth index 2b5ce91..71c0662 100644 --- a/script-local_crypto.eth +++ b/script-local_crypto.eth @@ -1,10 +1,10 @@ # Local crypto test script -T:LOCAL_CRYPTO ENCRYPT_LOCAL_ASYNC CHANNELID=2 BYPASSLEN=3 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth -R:LOCAL_CRYPTO ENCRYPT_LOCAL_ASYNC +T:LOCAL_CRYPTO ENCRYPT_LOCAL_ASYNC CHANNELID=2 BYPASSLEN=3 BYPASS=11:22:33:44 AAD=01:02:03:04 DATA=@script-cross_crypto.eth +R:LOCAL_CRYPTO ENCRYPT_LOCAL_ASYNC CHANNELID=2 BYPASSLEN=3 BYPASS=11:22:33:44 AAD=01:02:03:04 DATA=@script-cross_crypto.eth -T:LOCAL_CRYPTO ENCRYPTED_LOCAL_ASYNC CHANNELID=9 BYPASSLEN=0 DATA=@script-local_crypto.eth -R:LOCAL_CRYPTO ENCRYPTED_LOCAL_ASYNC +T:LOCAL_CRYPTO ENCRYPTED_LOCAL_ASYNC CHANNELID=9 BYPASSLEN=0 AAD=11:22 IV=31:32:33 DATA=@script-local_crypto.eth +R:LOCAL_CRYPTO ENCRYPTED_LOCAL_ASYNC AAD=11:22 IV=31:32:33 T:LOCAL_CRYPTO DECRYPT_LOCAL_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@script-local_crypto.eth R:LOCAL_CRYPTO DECRYPT_LOCAL_ASYNC -- 2.30.2