update ICD to add AAD and TAG fields
authorMazet Laurent <laurent.mazet@thalesgroup.com>
Thu, 24 Apr 2025 22:28:14 +0000 (00:28 +0200)
committerMazet Laurent <laurent.mazet@thalesgroup.com>
Thu, 24 Apr 2025 22:28:14 +0000 (00:28 +0200)
crypto/script-black.eth
crypto/script-red.eth
crypto/script-secu.eth
pdu_clear_data.c
pdu_clear_data.h
pdu_encrypted_data.c
pdu_encrypted_data.h
script-cross_crypto.eth
script-local_crypto.eth

index 8d370b7d95758eaa4341b54ee10a5f47f2ca4605..a1ab4d52ec2f4f2b3d661c636fe370d247639fa0 100644 (file)
@@ -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
index d9e23bfce6d80a47463902cf8a6f2bd3de4512bd..45572169592c63b4f7d2287df046458c04cc1cd1 100644 (file)
@@ -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
 
index bfd6ef0318ae2c19c86706a6875fb721182ed65b..e57d73ce7ff6497f81fbf503cddf4c18c8fffd09 100644 (file)
@@ -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
 
index e8bdcde34d6d8a4b776a4ed13be354a553cce842..80669b94993e32b0f8517020e0a37fcf4d96bf68 100644 (file)
@@ -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 ()
 }
index af27aef0c455d9f4cf5c6ca75c17930f2ced10c4..a3b670447dffea1ed94ae7f431e3f34faf04275c 100644 (file)
@@ -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;
 
 /**
index 3a5988a6190cfccdd74aaa9cf617f4bee05d5d80..c89d2637ec63650a797e8cc6b79c91b48bd45517 100644 (file)
@@ -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 ()
 }
index 5ceb478abf15375bc98a1b15a6c6c286a9ae4617..e933f6f3ec93cf6537e1a20924d483a75ec95488 100644 (file)
@@ -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;
 
 /**
index 63cc8e5ada5b0f4baea64672c64f17e12822876e..84cc62f9270831ca529443a20405836e92519d3a 100644 (file)
@@ -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
index 2b5ce9187c766079806c29be82dd486e1d4d9ac2..71c0662a75e8fc283ac56bbc471ffdac8fe47f7c 100644 (file)
@@ -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