manage protocol v1
authorLaurent Mazet <mazet@softndesign.org>
Thu, 8 May 2025 07:10:20 +0000 (09:10 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Thu, 8 May 2025 07:10:20 +0000 (09:10 +0200)
def.h
function.c
morep.c

diff --git a/def.h b/def.h
index bef4dbdfcb6b75af6a81da61e686c14e46e6e3f3..0ee7011498112f0dd2224a38622977a4b584d570 100644 (file)
--- a/def.h
+++ b/def.h
 #ifndef __DEF_H__
 #define __DEF_H__
 
-#define MOREP_PAYLOAD 1496
-//#define MOREP_PAYLOAD (1496 * 16 - 1)
+#define PROTOCOL_EXT
+//#define PAYLOAD_EXT
+
+#ifndef PAYLOAD_EXT
+#define MOREP_PAYLOAD (1496 - 1)
+#else
+#define MOREP_PAYLOAD (1496 * 16 - 1)
+#endif
 
 #endif /* __DEF_H__ */
 
index 3575d424e3843f532a9c46151030fc295076521d..5297e963796f96bb690459ec247d47e36049e57d 100644 (file)
@@ -60,8 +60,15 @@ int encrypt_func (CLEAR_DATA_t *in, ENCRYPTED_DATA_t *out)
     }
 
     /* copy bypass */
+#ifndef PROTOCOL_EXT
+    if (in->bypass_len) {
+        VERBOSE (cryptomod, WARNING, PRINTF ("not supproted by this protocol\n"));
+    }
+    out->bypass_len = 0
+#else
     memcpy (out->bypass, in->bypass, in->bypass_len * sizeof (uint8_t));
     out->bypass_len = in->bypass_len;
+#endif
 
     /* scramble with iv */
     for (int i = 0; i < in->data_len; i++) {
@@ -73,6 +80,7 @@ int encrypt_func (CLEAR_DATA_t *in, ENCRYPTED_DATA_t *out)
     int cid = in->channel_id;
     int kid = channels[cid] - 1;
     if (kid >= 0) {
+        // FIXIT: not thread safe
         uint8_t *key = keys[kid];
         int klen = key_lengths[kid];
         for (int i = 0; i < out->data_len; i++) {
@@ -102,8 +110,15 @@ int decrypt_func (ENCRYPTED_DATA_t *in, CLEAR_DATA_t *out)
     int iv_len = sizeof (in->iv);
 
     /* copy bypass */
+#ifndef PROTOCOL_EXT
+    if (in->bypass_len) {
+        VERBOSE (cryptomod, WARNING, PRINTF ("not supproted by this protocol\n"));
+    }
+    out->bypass_len = 0
+#else
     memcpy (out->bypass, in->bypass, in->bypass_len * sizeof (uint8_t));
     out->bypass_len = in->bypass_len;
+#endif
 
     /* scramble with iv */
     for (int i = 0; i < in->data_len; i++) {
@@ -115,6 +130,7 @@ int decrypt_func (ENCRYPTED_DATA_t *in, CLEAR_DATA_t *out)
     int cid = in->channel_id;
     int kid = channels[cid] - 1;
     if (kid >= 0) {
+        // FIXIT: not thread safe
         uint8_t *key = keys[kid];
         int klen = key_lengths[kid];
         for (int i = 0; i < out->data_len; i++) {
@@ -142,6 +158,10 @@ int load_key_func (KEY_t *in, STATUS_t *out)
     memcpy (keys[in->key_id], in->key, klen);
     key_lengths[kid] = klen;
 
+#ifndef PROTOCOL_EXT
+    channels[kid] = kid + 1;
+#endif
+
     out->status = ok_e;
 
     return 0;
@@ -157,6 +177,10 @@ int unload_key_func (KEY_t *in, STATUS_t *out)
     keys[kid] = NULL;
     key_lengths[kid] = 0;
 
+#ifndef PROTOCOL_EXT
+    channels[kid] = 0;
+#endif
+
     return 0;
 }
 
@@ -170,6 +194,9 @@ int erase_key_func (KEY_t *in, STATUS_t *out)
 
     for (int i = 0; i < NB_KEYS; i++) {
         free (keys[i]);
+#ifndef PROTOCOL_EXT
+        channels[i] = 0;
+#endif
     }
     memset (keys, 0, NB_KEYS * sizeof (uint8_t *));
     memset (key_lengths, 0, NB_KEYS * sizeof (int));
diff --git a/morep.c b/morep.c
index a75198f15bd707431e6f63f2c71c072a4a196578..e0997aae06745d12b990b826ce97716bea581bce 100644 (file)
--- a/morep.c
+++ b/morep.c
@@ -262,7 +262,9 @@ int find_unused_morep ()
 
     int i;
     for (i = 0; i < MAX_MOREP_NUMBER; i++) {
+        // FIXIT: not thread safe
         if (MOREP_list[i]->used == 0) {
+            MOREP_list[i]->used = 1;
             break;
         }
     }
@@ -270,7 +272,6 @@ int find_unused_morep ()
         VERBOSE (morep, WARNING, PRINTF ("can't find avaliable morep descriptor\n"));
         return -1;
     }
-    MOREP_list[i]->used = 1;
 
     VERBOSE (morep, DEBUG, PRINTF ("find morep: %d\n", i));