From 2152bd980e068f363bbde0ee62281bbeadaf3859 Mon Sep 17 00:00:00 2001 From: Mazet Laurent Date: Wed, 7 May 2025 15:39:34 +0200 Subject: [PATCH] correct dummy crypto --- cryptomod.c | 9 ++++++--- function.c | 50 +++++++++++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/cryptomod.c b/cryptomod.c index 9547d85..a726369 100644 --- a/cryptomod.c +++ b/cryptomod.c @@ -203,6 +203,7 @@ int main_thread (sub_task_t *s, int id) uint8_t payload[MOREP_PAYLOAD] = {0}; int len = 0; int seqnum = MOREP_Receive (in, &msgtype, payload, &len); + VERBOSE (crypto, DEBUG, PRINTF ("%s received a message (%d)\n", servname, len)); /* check service/msgtype */ message_t *msg = NULL; @@ -394,6 +395,7 @@ int main_thread (sub_task_t *s, int id) } /* send message */ + VERBOSE (crypto, DEBUG, PRINTF ("%s is sending a message (%d)\n", servname, len)); seqnum = MOREP_Send (out, msgtype, payload, len); /* log transmitted message */ @@ -552,8 +554,8 @@ int main (int argc, char **argv) if (mode != -1) { service_t *serv = find_service (servname); if (serv) { - VERBOSE (crypto, DEBUG, PRINTF ("url '%s' for service '%s' on %cX\n", url, servname, mode ? 'R' : 'T')); - if (mode) { + VERBOSE (crypto, DEBUG, PRINTF ("url '%s' for service '%s' on %cX\n", url, servname, (mode == 0) ? 'R' : 'T')); + if (mode == 0) { serv->rx = url; } else { serv->tx = url; @@ -580,7 +582,7 @@ int main (int argc, char **argv) /* main loop */ int stop = 0; while (!stop) { - usleep (1000); + usleep (1000); // wait before ready state switch (state) { case idle_e: VERBOSE (crypto, DEBUG, PRINTF ("starting\n")); @@ -599,6 +601,7 @@ int main (int argc, char **argv) case shutdowning_e: case error_e: VERBOSE (crypto, DEBUG, PRINTF ("shutdowning\n")); + usleep (100); // ugly! stop = 1; break; default: diff --git a/function.c b/function.c index 402a3e7..900cdc1 100644 --- a/function.c +++ b/function.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "cryptomod.h" #include "pdu_channel.h" @@ -70,16 +71,21 @@ int encrypt_func (CLEAR_DATA_t *in, ENCRYPTED_DATA_t *out) /* encrypt with key */ int cid = in->channel_id; - if ((channels[cid]) && (keys[channels[cid] - 1])) { - uint8_t *key = keys[channels[cid] - 1]; - int key_len = key_lengths[channels[cid] - 1]; + int kid = channels[cid] - 1; + if (kid >= 0) { + uint8_t *key = keys[kid]; + int klen = key_lengths[kid]; for (int i = 0; i < out->data_len; i++) { - out->data[i] = (out->data[i] ^ key[i % key_len]) & 0xff; + int a = out->data[i]; + out->data[i] = (out->data[i] ^ key[i % klen]) & 0xff; + if (i < 8) printf ("%02x%02x%02x%c", a, key[i % klen], out->data[i], (i != 7) ? '|' : '\n'); } } else { - VERBOSE (crypto, WARNING, PRINTF ("no key associated to channel %d\n", in->channel_id)); + VERBOSE (crypto, WARNING, PRINTF ("no key associated to channel %d (%d))\n", cid, kid)); } + usleep (200); // simulate cpu time + state = ready_e; return 0; @@ -109,16 +115,19 @@ int decrypt_func (ENCRYPTED_DATA_t *in, CLEAR_DATA_t *out) /* decrypt with key */ int cid = in->channel_id; - if ((channels[cid]) && (keys[channels[cid] - 1])) { - uint8_t *key = keys[channels[cid] - 1]; - int key_len = key_lengths[channels[cid] - 1]; + int kid = channels[cid] - 1; + if (kid >= 0) { + uint8_t *key = keys[kid]; + int klen = key_lengths[kid]; for (int i = 0; i < out->data_len; i++) { - out->data[i] = (out->data[i] ^ key[i % key_len]) & 0xff; + out->data[i] = (out->data[i] ^ key[i % klen]) & 0xff; } } else { - VERBOSE (crypto, WARNING, PRINTF ("no key associated to channel %d\n", in->channel_id)); + VERBOSE (crypto, WARNING, PRINTF ("no key associated to channel %d (%d)\n", cid, kid)); } + usleep (200); // simulate cpu time + state = ready_e; return 0; @@ -128,9 +137,12 @@ int load_key_func (KEY_t *in, STATUS_t *out) { VERBOSE (crypto, TRACE, PRINTF ("load_key_func\n")); - free (keys[in->key_id]); - keys[in->key_id] = (uint8_t *) calloc (1, in->key_len); - memcpy (in->key, keys[in->key_id], in->key_len); + int kid = in->key_id; + int klen = in->key_len; + free (keys[kid]); + keys[kid] = (uint8_t *) calloc (1, klen); + memcpy (keys[in->key_id], in->key, klen); + key_lengths[kid] = klen; out->status = ok_e; @@ -141,9 +153,11 @@ int unload_key_func (KEY_t *in, STATUS_t *out) { VERBOSE (crypto, TRACE, PRINTF ("unload_key_func\n")); - out->status = (keys[in->key_id]) ? ok_e : error_e; - free (keys[in->key_id]); - keys[in->key_id] = NULL; + int kid = in->key_id; + out->status = (keys[kid]) ? ok_e : error_e; + free (keys[kid]); + keys[kid] = NULL; + key_lengths[kid] = 0; return 0; } @@ -158,8 +172,9 @@ int erase_key_func (KEY_t *in, STATUS_t *out) for (int i = 0; i < NB_KEYS; i++) { free (keys[i]); - keys[i] = NULL; } + memset (keys, 0, NB_KEYS * sizeof (uint8_t *)); + memset (key_lengths, 0, NB_KEYS * sizeof (int)); out->status = ok_e; @@ -310,6 +325,7 @@ void clean_crypto_memory (void) free (keys[i]); } memset (keys, 0, NB_KEYS * sizeof (uint8_t *)); + memset (key_lengths, 0, NB_KEYS * sizeof (int)); memset (channels, 0, NB_CHANNELS * sizeof (uint8_t)); state = ready_e; } -- 2.30.2