From: Mazet Laurent Date: Tue, 20 May 2025 09:19:00 +0000 (+0200) Subject: bound repos to morep files only X-Git-Tag: v1.0~17 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=c481d769acf104595c335df4f0a29e1a5be2d0a6;p=morep.git bound repos to morep files only --- diff --git a/.gitignore b/.gitignore index 9e52601..c6775da 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.ld *.o *.exe +*.a diff --git a/core.c b/core.c deleted file mode 100644 index 4e4bf8d..0000000 --- a/core.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - File name : core.c - Projet : MERLIN - Date of creation : 2025/05/02 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : Miscellaenous functions on core/thread management - - History : - - initial version -*/ - -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include - -#include "verbose.h" - -#include "core.h" - -DECLARE_VERBOSE_LEVEL (coretools, INFO); - -int get_cpu_number (void) -{ - int ncpu = 0; - char *procinfo = "processor"; - - FILE *F = fopen ("/proc/cpuinfo", "r"); - if (F) { - char line[256] = { '\0' }; - while (fgets (line, sizeof (line) - 1, F)) { - if (strncmp (line, procinfo, strlen (procinfo)) == 0) - ncpu++; - } - fclose (F); - } - - return (ncpu == 0) ? 1 : ncpu; -} - - -/* Thread management */ - -int enable_realtime (int prio) -{ - struct sched_param param; - - param.__sched_priority = prio; - return pthread_setschedparam (pthread_self (), SCHED_FIFO, ¶m); -} - -int cpu_setaffinity (const char *cpu_list) -{ - cpu_set_t cpuset; - char *save_ptr; - char *cpu; - char delim[] = "+, "; - - if (!cpu_list) return -1; - - char *copy_list = strdup(cpu_list); - - CPU_ZERO(&cpuset); - cpu = strtok_r(copy_list, delim, &save_ptr); - while (cpu) { - CPU_SET(atoi(cpu), &cpuset); - cpu = strtok_r(NULL, delim, &save_ptr); - } - - free(copy_list); - - return pthread_setaffinity_np(pthread_self (), sizeof(cpu_set_t), &cpuset); -} - -/* vi:set tabstop=4 expandtab shiftwidth=4: this line set vi mode */ diff --git a/core.h b/core.h deleted file mode 100644 index d1588f0..0000000 --- a/core.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - File name : core.h - Projet : MERLIN - Date of creation : 2025/05/02 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : Miscellaenous functions on core/thread management - - History : - - initial version -*/ - -#ifndef __CORE_H__ -#define __CORE_H__ - -#include - -__BEGIN_DECLS - -/** - Declare a parameter or a variable unused. -*/ -#define UNUSED __attribute__ ((unused)) - -/** - Count number of CPU - - @return number of CPU -*/ -int get_cpu_number (void); - -/* Thread management */ - -/** - Set realtime priority - - @param prio priority - @return error code (from pthread_setschedparam) -*/ -int enable_realtime (int prio); - -/** - Set cpu (core) affinity - - @param cpu_list is a char string describing cpu affinity when core ids are separated by plus (+), comma (,) or space ( ) - @return error code (from pthread_setaffinity_np) -*/ -int cpu_setaffinity (const char *cpu_list); - -__END_DECLS - -#endif /* __CORE_H__ */ - - -/* vi:set tabstop=4 expandtab shiftwidth=4: this line set vi mode */ diff --git a/cryptomod.c b/cryptomod.c deleted file mode 100644 index 4bdb8e6..0000000 --- a/cryptomod.c +++ /dev/null @@ -1,652 +0,0 @@ -/* - File name : cryptomod.c - Projet : MERLIN - Date of creation : 2025/05/02 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : Crypto Module - - History : - - initial version -*/ - -/* depend: simulator.exe */ -/* cflags: */ -/* linker: core.o function.o morep.o parse.o pdu_bypass.o pdu_channel.o pdu_clear_data.o pdu_encrypted_data.o pdu_key.o pdu_prng_param.o pdu_raw_data.o pdu_status.o task.o -lcrypto */ - -#include -#include -#include -#include -#include -#include -#include - -#include "def.h" -#include "cryptomod.h" -#include "function.h" -#include "morep.h" -#include "pdu_channel.h" -#include "pdu_clear_data.h" -#include "pdu_encrypted_data.h" -#include "pdu_key.h" -#include "pdu_prng_param.h" -#include "pdu_raw_data.h" -#include "pdu_status.h" -#include "task.h" -#include "verbose.h" - -char *progname = NULL; - -DECLARE_VERBOSE_LEVEL (crypto, INFO); - -#define BUFMAX 4096 - -task_t *task = NULL; - -state_t state = idle_e; - -FILE *logfile = NULL; - -#define NBSERVICES 10 -char *services[NBSERVICES] = { - "CROSS_CRYPTO_B2R", - "CROSS_CRYPTO_R2B", - "LOCAL_CRYPTO_BLACK", - "LOCAL_CRYPTO_RED", - "PROVISIONING", - "PRNG_BLACK", - "PRNG_RED", - "BYPASS_B2R", - "BYPASS_R2B", - "CONTROL", -}; - -/* definition of all messages */ -message_t message_list[] = { - - /* Cross cryptographic B-2-R service */ - {"DECRYPT_CROSS_ASYNC", cross_crypto_b2r_e, 0x02, encrypted_data_e, decrypt_func_e}, - {"DECRYPTED_CROSS_ASYNC", cross_crypto_b2r_e, 0x03, clear_data_e, nofunc_e}, - - /* Cross cryptographic R-2-B service */ - {"ENCRYPT_CROSS_ASYNC", cross_crypto_r2b_e, 0x00, clear_data_e, encrypt_func_e}, - {"ENCRYPTED_CROSS_ASYNC", cross_crypto_r2b_e, 0x01, encrypted_data_e, nofunc_e}, - - /* Local cryptographic Black and Red services */ - {"ENCRYPT_LOCAL_REQ", local_crypto_e, 0x00, clear_data_e, encrypt_func_e}, - {"ENCRYPTED_LOCAL_RESP", local_crypto_e, 0x01, encrypted_data_e, nofunc_e}, - {"DECRYPT_LOCAL_REQ", local_crypto_e, 0x02, encrypted_data_e, decrypt_func_e}, - {"DECRYPTED_LOCAL_RESP", local_crypto_e, 0x03, clear_data_e, nofunc_e}, - - /* Provisioning service */ - {"LOAD_KEY_REQ", provisioning_e, 0x00, key_e, load_key_func_e}, - {"LOAD_KEY_RESP", provisioning_e, 0x01, status_e, nofunc_e}, - {"UNLOAD_KEY_REQ", provisioning_e, 0x02, key_e, unload_key_func_e}, - {"UNLOAD_KEY_RESP", provisioning_e, 0x03, status_e, nofunc_e}, - {"ERASE_KEY_REQ", provisioning_e, 0x04, key_e, erase_key_func_e}, - {"ERASE_KEY_RESP", provisioning_e, 0x05, status_e, nofunc_e}, - {"ASSOCIATE_CHANNEL_REQ", provisioning_e, 0x06, channel_e, associate_channel_e}, - {"ASSOCIATE_CHANNEL_RESP", provisioning_e, 0x07, status_e, nofunc_e}, - {"DISSOCIATE_CHANNEL_REQ", provisioning_e, 0x08, channel_e, dissociate_channel_e}, - {"DISSOCIATE_CHANNEL_RESP", provisioning_e, 0x09, status_e, nofunc_e}, - - /* Bypass B-2-R and R-2-B services */ - {"BYPASS_CROSS_ASYNC", bypass_e, 0x00, raw_data_e, bypass_func_e}, - {"BYPASSED_CROSS_ASYNC", bypass_e, 0x01, raw_data_e, nofunc_e}, - - /* PRNG Black and Red services */ - {"RANDOM_REQ", prng_e, 0x00, prng_param_e, random_func_e}, - {"RANDOM_RESP", prng_e, 0x01, raw_data_e, nofunc_e}, - - /* Control service */ - {"STATUS_REQ", control_e, 0x00, nopdu_e, status_func_e}, - {"STATUS_RESP", control_e, 0x01, status_e, nofunc_e}, - {"AUTHENTICATION_REQ", control_e, 0x02, raw_data_e, authentification_func_e}, - {"AUTHENTICATION_RESP", control_e, 0x03, raw_data_e, nofunc_e}, - {"REBOOT_REQ", control_e, 0x04, nopdu_e, reboot_func_e}, - {"REBOOT_RESP", control_e, 0x05, status_e, nofunc_e}, - {"ZEROIZE_REQ", control_e, 0x06, nopdu_e, zeroize_func_e}, - {"ZEROIZE_RESP", control_e, 0x07, status_e, nofunc_e}, - {"LOCK_CRYPTO_REQ", control_e, 0xFE, nopdu_e, lock_crypto_func_e}, - {"LOCK_CRYPTO_RESP", control_e, 0xFF, status_e, nofunc_e}, - - /* End of list */ - {"", noserv_e, 0x00, undef_pdu_e, nofunc_e} -}; - -/* for test on localloop: - - red side - - tx is 080x - - rx is 081x - - black side - - tx is 082x - - rx is 083x -*/ - -/* definition of all services */ -service_t service_list[] = { - {"CROSS_CRYPTO_B2R", cross_crypto_b2r_e, "lo://00:00:00:00:00:00/0809", "lo://00:00:00:00:00:00/0839"}, /* 809 */ - {"CROSS_CRYPTO_R2B", cross_crypto_r2b_e, "lo://00:00:00:00:00:00/0829", "lo://00:00:00:00:00:00/0819"}, /* 809 */ - {"LOCAL_CRYPTO_BLACK", local_crypto_e, "lo://00:00:00:00:00:00/082a", "lo://00:00:00:00:00:00/083a"}, /* 80a */ - {"LOCAL_CRYPTO_RED", local_crypto_e, "lo://00:00:00:00:00:00/080a", "lo://00:00:00:00:00:00/081a"}, /* 80a */ - {"PROVISIONING", provisioning_e, "lo://00:00:00:00:00:00/080b", "lo://00:00:00:00:00:00/081b"}, /* 80b */ - {"PRNG_BLACK", prng_e, "lo://00:00:00:00:00:00/082c", "lo://00:00:00:00:00:00/083c"}, /* 80c */ - {"PRNG_RED", prng_e, "lo://00:00:00:00:00:00/080c", "lo://00:00:00:00:00:00/081c"}, /* 80c */ - {"BYPASS_B2R", bypass_e, "lo://00:00:00:00:00:00/080d", "lo://00:00:00:00:00:00/083d"}, /* 80d */ - {"BYPASS_R2B", bypass_e, "lo://00:00:00:00:00:00/082d", "lo://00:00:00:00:00:00/081d"}, /* 80d */ - {"CONTROL", control_e, "lo://00:00:00:00:00:00/080e", "lo://00:00:00:00:00:00/081e"}, /* 80e */ - {"", noserv_e, NULL, NULL} -}; - -/* various functions */ - -service_t *find_service (char *servname) -{ - service_t *serv = NULL; - for (int i = 0; ((service_list + i)->service_id != noserv_e) && (!serv); i++) { - service_t *s = service_list + i; - if ((s) && (servname) && (strcmp (s->name, servname) == 0)) { - serv = s; - } - } - return serv; -} - -/* main thread function */ - -int main_thread (sub_task_t *s, int id) -{ - if ((s == NULL) || (id < 0) || (id >= NBSERVICES)) { - VERBOSE (crypto, ERROR, PRINTF ("can't start thread '%d'\n", id)); - state = error_e; - return 1; - } - - char *servname = services[id]; - service_t *serv = find_service (servname); - if (!serv) { - VERBOSE (crypto, ERROR, PRINTF ("can't find service '%s' (%d)\n", servname, id)); - state = error_e; - return 1; - } - int in = MOREP_Connect (serv->rx); - if (in < 0) { - VERBOSE (crypto, ERROR, PRINTF ("can't open RX MOREP '%s' for service '%s'\n", serv->rx, servname)); - state = error_e; - return 1; - } - int out = MOREP_Connect (serv->tx); - if (in < 0) { - VERBOSE (crypto, ERROR, PRINTF ("can't open TX MOREP '%s' for service '%s'\n", serv->tx, servname)); - MOREP_Close (in); - state = error_e; - return 1; - } - - int rc = 0; - - while (1) { - CHANNEL_t pdu_channel = {0}; - CLEAR_DATA_t pdu_clear_data = {0}; - ENCRYPTED_DATA_t pdu_encrypted_data = {0}; - KEY_t pdu_key = {0}; - PRNG_PARAM_t pdu_prng_param = {0}; - RAW_DATA_t pdu_raw_data = {0}; - STATUS_t pdu_status = {0}; - - /* listen a message */ - uint8_t msgtype = 0; - 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; - for (int i = 0; ((message_list + i)->service_id) && (!msg); i++) { - message_t *m = message_list + i; - if ((m->service_id == serv->service_id) && (m->msgtype == msgtype)) { - msg = m; - } - } - - /* check msg type */ - if (msg == NULL) { - VERBOSE (crypto, WARNING, PRINTF ("R:%s [SEQ=%d MSG=%d LEN=%d] message type is not allowed for this service\n", serv->name, seqnum, msgtype, len)); - continue; - } - - /* deserialize message */ - rc = 1; - switch (msg->pdu) { - case nopdu_e: - rc = 0; - break; - case channel_e: - rc = deserial_channel (payload, len, &pdu_channel); - break; - case clear_data_e: - rc = deserial_clear_data (payload, len, &pdu_clear_data); - break; - case encrypted_data_e: - rc = deserial_encrypted_data (payload, len, &pdu_encrypted_data); - break; - case key_e: - rc = deserial_key (payload, len, &pdu_key); - break; - case prng_param_e: - rc = deserial_prng_param (payload, len, &pdu_prng_param); - break; - case raw_data_e: - rc = deserial_raw_data (payload, len, &pdu_raw_data); - break; - case status_e: - rc = deserial_status (payload, len, &pdu_status); - break; - default: - } - if (rc) { - VERBOSE (crypto, WARNING, PRINTF ("can't deserialize message %s\n", msg->name)); - continue; - } - - /* log received message */ - VERBOSE (crypto, INFO, PRINTF ("R:%s [SEQ=%d MSG=%d LEN=%d PDU=%d] %s\n", serv->name, seqnum, msgtype, len, msg->pdu, msg->name)); - if (logfile) { - fprintf (logfile, "R:%s [SEG=%d MSG=%d LEN=%d PDU=%d] %s", serv->name, seqnum, msgtype, len, msg->pdu, msg->name); - char buffer[MOREP_PAYLOAD * 3 + 256] = {0}; - switch (msg->pdu) { - case nopdu_e: - break; - case channel_e: - format_channel (&pdu_channel, buffer, sizeof (buffer)); - break; - case clear_data_e: - format_clear_data (&pdu_clear_data, buffer, sizeof (buffer)); - break; - case encrypted_data_e: - format_encrypted_data (&pdu_encrypted_data, buffer, sizeof (buffer)); - break; - case key_e: - format_key (&pdu_key, buffer, sizeof (buffer)); - break; - case prng_param_e: - format_prng_param (&pdu_prng_param, buffer, sizeof (buffer)); - break; - case raw_data_e: - format_raw_data (&pdu_raw_data, buffer, sizeof (buffer)); - break; - case status_e: - format_status (&pdu_status, buffer, sizeof (buffer)); - break; - default: - snprintf (buffer, sizeof (buffer), "unknown payload"); - } - fprintf (logfile, "%s\n", buffer); - } - - /* process message */ - rc = 1; - switch (msg->func) { - case nofunc_e: - break; - case encrypt_func_e: - rc = encrypt_func (&pdu_clear_data, &pdu_encrypted_data); - break; - case decrypt_func_e: - rc = decrypt_func (&pdu_encrypted_data, &pdu_clear_data); - break; - case load_key_func_e: - rc = load_key_func (&pdu_key, &pdu_status); - break; - case unload_key_func_e: - rc = unload_key_func (&pdu_key, &pdu_status); - break; - case erase_key_func_e: - rc = erase_key_func (&pdu_key, &pdu_status); - break; - case associate_channel_e: - rc = associate_channel_func (&pdu_channel, &pdu_status); - break; - case dissociate_channel_e: - rc = dissociate_channel_func (&pdu_channel, &pdu_status); - break; - case bypass_func_e: - //rc = bypass_func (&pdu_raw_data, &pdu_raw_data); - rc = 0; - break; - case random_func_e: - rc = random_func (&pdu_prng_param, &pdu_raw_data); - break; - case status_func_e: - rc = status_func (NULL, &pdu_status); - break; - case authentification_func_e: - rc = authentification_func (&pdu_raw_data, &pdu_raw_data); - break; - case reboot_func_e: - rc = reboot_func (NULL, &pdu_status); - break; - case zeroize_func_e: - rc = zeroize_func (NULL, &pdu_status); - break; - case lock_crypto_func_e: - rc = lock_crypto_func (NULL, &pdu_status); - break; - } - if (rc) { - VERBOSE (crypto, WARNING, PRINTF ("can't process message %s\n", msg->name)); - continue; - } - - /* prepare message for transmission */ - msgtype++; - - /* check service/msgtype */ - msg = NULL; - for (int i = 0; ((message_list + i)->service_id) && (!msg); i++) { - message_t *m = message_list + i; - if ((m->service_id == serv->service_id) && (m->msgtype == msgtype)) { - msg = m; - } - } - - /* check msg type */ - if (msg == NULL) { - VERBOSE (crypto, WARNING, PRINTF ("T:%s [SEQ=%d MSG=%d] message type is not allowed for this service\n", serv->name, seqnum, msgtype)); - continue; - } - - /* serialize message */ - len = -1; - switch (msg->pdu) { - case nopdu_e: - len = 0; - break; - case channel_e: - len = serial_channel (&pdu_channel, payload, sizeof (payload)); - break; - case clear_data_e: - len = serial_clear_data (&pdu_clear_data, payload, sizeof (payload)); - break; - case encrypted_data_e: - len = serial_encrypted_data (&pdu_encrypted_data, payload, sizeof (payload)); - break; - case key_e: - len = serial_key (&pdu_key, payload, sizeof (payload)); - break; - case prng_param_e: - len = serial_prng_param (&pdu_prng_param, payload, sizeof (payload)); - break; - case raw_data_e: - len = serial_raw_data (&pdu_raw_data, payload, sizeof (payload)); - break; - case status_e: - len = serial_status (&pdu_status, payload, sizeof (payload)); - break; - default: - } - if (len < 0) { - VERBOSE (crypto, WARNING, PRINTF ("can't serialize message %s\n", msg->name)); - } - - /* 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 */ - VERBOSE (crypto, INFO, PRINTF ("T:%s [SEQ=%d MSG=%d LEN=%d PDU=%d] %s\n", serv->name, seqnum, msgtype, len, msg->pdu, msg->name)); - if (logfile) { - fprintf (logfile, "T:%s [SEG=%d MSG=%d LEN=%d PDU=%d] %s", serv->name, seqnum, msgtype, len, msg->pdu, msg->name); - char buffer[MOREP_PAYLOAD * 3 + 256] = {0}; - switch (msg->pdu) { - case nopdu_e: - break; - case channel_e: - format_channel (&pdu_channel, buffer, sizeof (buffer)); - break; - case clear_data_e: - format_clear_data (&pdu_clear_data, buffer, sizeof (buffer)); - break; - case encrypted_data_e: - format_encrypted_data (&pdu_encrypted_data, buffer, sizeof (buffer)); - break; - case key_e: - format_key (&pdu_key, buffer, sizeof (buffer)); - break; - case prng_param_e: - format_prng_param (&pdu_prng_param, buffer, sizeof (buffer)); - break; - case raw_data_e: - format_raw_data (&pdu_raw_data, buffer, sizeof (buffer)); - break; - case status_e: - format_status (&pdu_status, buffer, sizeof (buffer)); - break; - default: - snprintf (buffer, sizeof (buffer), "unknown payload"); - } - fprintf (logfile, "%s\n", buffer); - } - } - - return 0; -} - -void clean_all (int all) -{ - kill_all_subtasks (task, SIGTERM); - for (int i = 0; i < NBSERVICES * 2; i++) { - MOREP_Close (i); - } - clean_crypto_memory (); - if (all) { - if ((logfile) && (logfile != stdout)) { - fclose (logfile); - } - } -} - -/* signal handler */ -void sig_handler (int sig) -{ - switch (sig) { - case SIGINT: - case SIGTERM: - clean_all (1); - exit (0); - break; - } -} - -/* usage function */ -void usage (void) { - printf ("usage: %s [-h] [-l log] [-r url] [-s srv] [-t url] [-v lvl] [-V lvl]\n", progname); - printf (" -h : help message\n"); - printf (" -l log: log all message into a file or stdout if -\n"); - printf (" -r url: set MOREP url for a receveiving service\n"); - printf (" -s srv: define a service\n"); - printf (" -t url: set MOREP url for a transmiting service\n"); - printf (" -v lvl: verbose level for MOREP functions (%d)\n", GET_VERBOSE_LEVEL(morep)); - printf (" -V lvl: verbose level for crypto modul functions (%d)\n", GET_VERBOSE_LEVEL(crypto)); -} - -/* main function */ -int main (int argc, char **argv) -{ - - /* get basename */ - char *ptr = progname = argv[0]; - while (*ptr) { - if ((*ptr == '/') || (*ptr == '\\')) { - progname = ptr + 1; - } - ptr++; - } - - /* process argument */ - char *logname = NULL; - char *servname = NULL; - while (argc-- > 1) { - char *url = NULL; - int mode = -1; - - char *arg = *(++argv); - if (arg[0] != '-') { - usage (); - return 1; - } - char c = arg[1]; - switch (c) { - case 'l': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (crypto, ERROR, PRINTF ("%s: log file not specified\n", progname)); - return 1; - } - logname = arg; - break; - case 'r': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (crypto, ERROR, PRINTF ("%s: receiver url not specified\n", progname)); - return 1; - } - url = arg; - mode = 0; - break; - case 's': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (crypto, ERROR, PRINTF ("%s: service not specified\n", progname)); - return 1; - } - servname = arg; - break; - case 't': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (crypto, ERROR, PRINTF ("%s: transmitter url not specified\n", progname)); - return 1; - } - url = arg; - mode = 1; - break; - case 'v': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (crypto, ERROR, PRINTF ("%s: morep verbose level not specified\n", progname)); - return 1; - } - CHANGE_VERBOSE_LEVEL (morep, atoi (arg)); - break; - case 'V': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (crypto, ERROR, PRINTF ("%s: cryptomod verbose level not specified\n", progname)); - return 1; - } - CHANGE_VERBOSE_LEVEL (crypto, atoi (arg)); - break; - case 'h': - default: - usage (); - return (c != 'h'); - } - - /* init communication channel */ - 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 == 0) ? 'R' : 'T')); - if (mode == 0) { - serv->rx = url; - } else { - serv->tx = url; - } - } else { - VERBOSE (crypto, WARNING, PRINTF ("can't find service '%s'\n", servname)); - } - } - } - - /* logfile */ - if (logname) { - logfile = (strcmp (logname, "-") == 0) ? stdout : fopen (logname, "w"); - if (logfile == NULL) { - VERBOSE (crypto, WARNING, PRINTF ("can't open log file '%s'\n", logname)); - } - } - - /* signals */ - signal(SIGINT, sig_handler); - signal(SIGTERM, sig_handler); - - /* main loop */ - int stop = 0; - while (!stop) { - usleep (1000); // wait before ready state - switch (state) { - case idle_e: - VERBOSE (crypto, DEBUG, PRINTF ("starting\n")); - state = booting_e; - task = create_async_task ("CRYPTOMOD", main_thread, 0, NBSERVICES, NULL); -#ifdef PROCOTOL_EXP - state = initializing_e; -#else - state = ready_e; -#endif - break; - case booting_e : - VERBOSE (crypto, DEBUG, PRINTF ("Rebooting\n")); - clean_all (0); - state = idle_e; - break; - case shutdowning_e: - case error_e: - VERBOSE (crypto, DEBUG, PRINTF ("shutdowning\n")); - usleep (100); // ugly! - stop = 1; - break; - default: - } - } - - /* cleaning */ - clean_all (1); - - return 0; -} - -/* test: cryptomod.exe -h | grep usage */ -/* test: cryptomod.exe -l | grep 'log file not specified' */ -/* test: cryptomod.exe -r | grep 'url not specified' */ -/* test: cryptomod.exe -s | grep 'service not specified' */ -/* test: cryptomod.exe -t | grep 'url not specified' */ -/* test: cryptomod.exe -v | grep 'morep verbose level not specified' */ -/* test: cryptomod.exe -V | grep 'cryptomod verbose level not specified' */ - -/* test: cryptomod.exe -V 3 -l script-cross_crypto_r2b-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-cross_crypto_r2b-si.log -s CROSS_CRYPTO -t lo://00:00:00:00:00:00/0819 -r lo://00:00:00:00:00:00/0829 -s PROVISIONING -t lo://00:00:00:00:00:00/081b -r lo://00:00:00:00:00:00/080b test/script-cross_crypto_r2b-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ -/* test: cryptomod.exe -V 3 -l script-cross_crypto_b2r-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-cross_crypto_b2r-si.log -s CROSS_CRYPTO -t lo://00:00:00:00:00:00/0839 -r lo://00:00:00:00:00:00/0809 -s PROVISIONING -t lo://00:00:00:00:00:00/081b -r lo://00:00:00:00:00:00/080b test/script-cross_crypto_b2r-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -V 3 -l script-local_crypto_black-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-local_crypto_black-si.log -s LOCAL_CRYPTO -t lo://00:00:00:00:00:00/083a -r lo://00:00:00:00:00:00/082a -s PROVISIONING -t lo://00:00:00:00:00:00/081b -r lo://00:00:00:00:00:00/080b test/script-local_crypto-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -V 3 -l script-local_crypto_red-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-local_crypto_red-si.log -s LOCAL_CRYPTO -t lo://00:00:00:00:00:00/081a -r lo://00:00:00:00:00:00/080a -s PROVISIONING -t lo://00:00:00:00:00:00/081b -r lo://00:00:00:00:00:00/080b test/script-local_crypto-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -V 3 -l script-provisioning-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-provisioning-si.log -s PROVISIONING -t lo://00:00:00:00:00:00/081b -r lo://00:00:00:00:00:00/080b test/script-provisioning-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -V 3 -l script-prng_black-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-prng_black-si.log -s PRNG -t lo://00:00:00:00:00:00/083c -r lo://00:00:00:00:00:00/082c test/script-prng-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -v 2 -V 3 -l script-prng_red-cm.log -s PRNG_BLACK -t lo://00:00:00:00:00:00/080c -r lo://00:00:00:00:00:00/081c & pid=$!; sleep 1; ./simulator.exe -l script-prng_red-si.log -s PRNG -t lo://00:00:00:00:00:00/081c -r lo://00:00:00:00:00:00/080c test/script-prng-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -V 3 -l script-bypass_b2r-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-bypass_b2r-si.log -s BYPASS -t lo://00:00:00:00:00:00/083d -r lo://00:00:00:00:00:00/080d test/script-bypass-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -V 3 -l script-bypass_r2b-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-bypass_r2b-si.log -s BYPASS -t lo://00:00:00:00:00:00/081d -r lo://00:00:00:00:00:00/082d test/script-bypass-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ - -/* test: cryptomod.exe -V 3 -l script-control-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-control-si.log -s CONTROL -t lo://00:00:00:00:00:00/081e -r lo://00:00:00:00:00:00/080e test/script-control-si.eth; rc=$?; sleep 1; kill -TERM $pid; test $rc -eq 0 */ -/* test: cryptomod.exe -V 3 -l script-control-cm.log & pid=$!; sleep 1; ./simulator.exe -l script-control-si.log -s CONTROL -t lo://00:00:00:00:00:00/081e -r lo://00:00:00:00:00:00/080e test/script-control-si.eth; sleep 1; LANG=C kill -TERM $pid 2>&1 | grep "No such process" */ - -/* vim: set ts=4 sw=4 si et: */ diff --git a/cryptomod.h b/cryptomod.h deleted file mode 100644 index 852cd7f..0000000 --- a/cryptomod.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - File name : cryptomode.h - Projet : MERLIN - Date of creation : 2025/05/02 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : This file defines crypto module types - - History : - - initial version -*/ - -#ifndef __CRYPTOMOD_H__ -#define __CRYPTOMOD_H__ - -#include -#include - -__BEGIN_DECLS - -/** - @defgroup CRYPTOMOD Public API of Crypto module - -*/ - -/** - @ingroup CRYPTOMOD - - Service enumarate values -*/ -typedef enum { - noserv_e = 0, /**< no service defined */ - cross_crypto_r2b_e, /**< cross cryptographic R-2-B service */ - cross_crypto_b2r_e, /**< cross cryptographic B-2-R service */ - local_crypto_e, /**< local cryptographic Black and Red services */ - provisioning_e, /**< provisioning service */ - prng_e, /**< PRNG Black and Red services */ - bypass_e, /**< bypass B-2-R and R-2-B services */ - control_e /**< controlservice */ -} service_id_t; - -/** - @ingroup CRYPTOMOD - - PDU enumarate values -*/ -typedef enum { - undef_pdu_e = 0, /**< undefined PDU */ - channel_e, /**< CHANNEL_t PDU */ - clear_data_e, /**< CLEAR_DATA_t PDU */ - encrypted_data_e, /**< ENCRYPTED_DATA_t PDU */ - key_e, /**< KEY_t PDU */ - prng_param_e, /**< PRNG_PARAM_t PDU */ - raw_data_e, /**< RAW_DATA_t PDU */ - status_e, /**< STATUS_t PDU */ - nopdu_e /**< no PDU */ -} pdu_t; - -/** - @ingroup CRYPTOMOD - - Function type -*/ -typedef enum { - nofunc_e = 0, /**< undefined function */ - encrypt_func_e, /**< encrypt function */ - decrypt_func_e, /**< decrypt function */ - load_key_func_e, /**< load key function */ - unload_key_func_e, /**< unload key function */ - erase_key_func_e, /**< erase key function */ - associate_channel_e, /**< associate channel function */ - dissociate_channel_e, /**< dissociate channel function */ - bypass_func_e, /**< bypass function */ - random_func_e, /**< random function */ - status_func_e, /**< get status function */ - authentification_func_e, /**< authentification function */ - reboot_func_e, /**< reboot function */ - zeroize_func_e, /** - - Description : Crypto Module functions - - History : - - initial version -*/ - -#include -#include -#include -#include -#include - -#include "def.h" - -#include "cryptomod.h" -#include "pdu_bypass.h" -#include "pdu_channel.h" -#include "pdu_clear_data.h" -#include "pdu_encrypted_data.h" -#include "pdu_key.h" -#include "pdu_prng_param.h" -#include "pdu_raw_data.h" -#include "pdu_status.h" -#include "verbose.h" - -#include "function.h" - -extern state_t state; - -#define NB_KEYS 255 - -uint8_t *keys[NB_KEYS] = {0}; -int key_lengths[NB_KEYS] = {0}; - -#define NB_CHANNELS 255 - -uint8_t channels[NB_CHANNELS] = {0}; - -int content_filter (BYPASS_t *in) -{ - int rc = 1; - - switch (in->id) { - case 0: /* bypass message 0 */ - rc = 0; - break; - } - - return rc; -} - -int encrypt_func (CLEAR_DATA_t *in, ENCRYPTED_DATA_t *out) - -{ - VERBOSE (crypto, TRACE, PRINTF ("encrypt_func\n")); - - int rc = 0; - - // FIXIT: not thread safe - state = working_e; - - /* channel id */ - out->channel_id = in->channel_id; - - /* filter bypass */ - if (in->bypass_len) { -#ifndef PROTOCOL_EXT - VERBOSE (crypto, WARNING, PRINTF ("bypass not supproted by this protocol\n")); - rc = 1; - goto end_encrypt_func; -#endif - - BYPASS_t pdu_bypass = {0}; - deserial_bypass (in->bypass, in->bypass_len, &pdu_bypass); - if (content_filter (&pdu_bypass)) { - VERBOSE (crypto, WARNING, PRINTF ("bypass message filtered\n")); - rc = 1; - goto end_encrypt_func; - } else { - memcpy (out->bypass, in->bypass, in->bypass_len * sizeof (uint8_t)); - out->bypass_len = in->bypass_len; - } - } - - /* get add */ - int aad_len = sizeof (in->aad); - - /* look for key */ - int cid = in->channel_id; - int kid = channels[cid] - 1; - uint8_t key[KEY_LENGTH] = {0}; - if (kid >= 0) { - // FIXIT: not thread safe - int klen = key_lengths[kid]; - if (klen != KEY_LENGTH) { - VERBOSE (crypto, WARNING, PRINTF ("incorrect key length (%d)\n", klen)); - rc = 1; - goto end_encrypt_func; - } - memcpy (key, keys[kid], klen); - } else { - VERBOSE (crypto, WARNING, PRINTF ("no key associated to channel %d (%d)\n", cid, kid)); - rc = 1; - goto end_encrypt_func; - } - - /* draw iv */ - int iv_len = sizeof (out->iv); - for (int i = 0, r = 0; i < iv_len; i++) { - if (i % 4) { - r = rand (); - } - out->iv[i] = r & 0xff; - r >>= 8; - } - - /* encrypt message */ - EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); - EVP_EncryptInit_ex (ctx, EVP_aes_256_gcm (), NULL, NULL, NULL); - EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_IVLEN, iv_len, NULL); - EVP_EncryptInit_ex (ctx, NULL, NULL, key, out->iv); - int out_len = 0; - if (aad_len) { - EVP_EncryptUpdate (ctx, NULL, &out_len, in->aad, aad_len); - } - EVP_EncryptUpdate (ctx, out->data, &out_len, in->data, in->data_len); - out->data_len = out_len; - if (EVP_EncryptFinal_ex (ctx, out->data + out->data_len, &out_len)) { - out->data_len += out_len; - EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_AEAD_GET_TAG, TAG_LENGTH, (void *)(out->data + out->data_len)); - out->data_len += TAG_LENGTH; - } else { - VERBOSE (crypto, WARNING, PRINTF ("encryption error\n")); - //memset (out->data, 0, out->data_len + out_len); - out->data_len = 0; - rc = 1; - } - EVP_CIPHER_CTX_free (ctx); - -end_encrypt_func: - - state = ready_e; - - return rc; -} - -int decrypt_func (ENCRYPTED_DATA_t *in, CLEAR_DATA_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("decrypt_func\n")); - - int rc = 0; - - // FIXIT: not thread safe - state = working_e; - - /* channel id */ - out->channel_id = in->channel_id; - - /* filter bypass */ - if (in->bypass_len) { -#ifndef PROTOCOL_EXT - VERBOSE (crypto, WARNING, PRINTF ("bypass not supproted by this protocol\n")); - rc = 1; - goto end_decrypt_func; -#endif - - BYPASS_t pdu_bypass = {0}; - deserial_bypass (in->bypass, in->bypass_len, &pdu_bypass); - if (content_filter (&pdu_bypass)) { - VERBOSE (crypto, WARNING, PRINTF ("bypass message filtered\n")); - rc = 1; - goto end_decrypt_func; - } else { - memcpy (out->bypass, in->bypass, in->bypass_len * sizeof (uint8_t)); - out->bypass_len = in->bypass_len; - } - } - - /* get aad */ - int aad_len = sizeof (in->aad); - - /* look for key */ - int cid = in->channel_id; - int kid = channels[cid] - 1; - uint8_t key[KEY_LENGTH] = {0}; - if (kid >= 0) { - // FIXIT: not thread safe - int klen = key_lengths[kid]; - if (klen != KEY_LENGTH) { - VERBOSE (crypto, WARNING, PRINTF ("incorrect key length (%d)\n", klen)); - rc = 1; - goto end_decrypt_func; - } - memcpy (key, keys[kid], klen); - } else { - VERBOSE (crypto, WARNING, PRINTF ("no key associated to channel %d (%d)\n", cid, kid)); - rc = 1; - goto end_decrypt_func; - } - - /* get iv */ - int iv_len = sizeof (in->iv); - - /* decrypt message */ - EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); - EVP_DecryptInit_ex (ctx, EVP_aes_256_gcm (), NULL, NULL, NULL); - EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_IVLEN, iv_len, NULL); - if (EVP_DecryptInit_ex (ctx, NULL, NULL, key, in->iv)) { - EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_AEAD_SET_TAG, TAG_LENGTH, (void *)(in->data + in->data_len - TAG_LENGTH)); - } - int out_len = 0; - if (aad_len) { - EVP_DecryptUpdate (ctx, NULL, &out_len, in->aad, aad_len); - } - if (EVP_DecryptUpdate (ctx, out->data, &out_len, in->data, in->data_len - TAG_LENGTH)) { - out->data_len = out_len; - if (EVP_DecryptFinal_ex (ctx, NULL, &out_len)) { - out->data_len += out_len; - } else { - VERBOSE (crypto, WARNING, PRINTF ("decryption error\n")); - //memset (out->data, 0, out_len); - out->data_len = 0; - rc = 1; - } - } else { - VERBOSE (crypto, WARNING, PRINTF ("decryption error\n")); - //memset (out->data, 0, out_len); - out->data_len = 0; - rc = 1; - } - EVP_CIPHER_CTX_free (ctx); - -end_decrypt_func: - - state = ready_e; - - return rc; -} - -int load_key_func (KEY_t *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("load_key_func\n")); - - //FIXIT: not thread safe - state_t old_state = state; - state = updating_e; - - 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; - -#ifndef PROTOCOL_EXT - channels[kid] = kid + 1; - VERBOSE(crypto, DEBUG, PRINTF ("load key (%d) stored in channels (%d)\n", kid, channels[kid])); -#endif - state = old_state; - - out->status = ok_e; - - return 0; -} - -int unload_key_func (KEY_t *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("unload_key_func\n")); - - //FIXIT: not thread safe -#ifdef PROTOCOL_EXT - state_t old_state = state; -#endif - state = updating_e; - - int kid = in->key_id; -#ifdef PROTOCOL_EXT - for (int i = 0; i < NB_CHANNELS; i++) { - if (channels[i] == kid + 1) { - VERBOSE (crypto, WARNING, PRINTF ("key (%d) is still associated to a channel (%d)\n", kid, i)); - out->status = error_e; - state = old_state; - return 0; - } - } -#endif - - if (keys[kid]) { - out->status = ok_e; - free (keys[kid]); - keys[kid] = NULL; - key_lengths[kid] = 0; - } else { - VERBOSE (crypto, WARNING, PRINTF ("key (%d) wasn't loaded\n", kid)); - out->status = error_e; - } - -#ifndef PROTOCOL_EXT - channels[kid] = 0; - - state = ready_e; -#else - state_t _state = initializing_e; - for (int i = 0; i < NB_CHANNELS; i++) { - if (channels[i]) { - _state = ready_e; - break; - } - } - state = _state; -#endif - - return 0; -} - -int erase_key_func (KEY_t *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("erase_key_func\n")); - - //FIXIT: not thread safe -#ifdef PROTOCOL_EXT - state_t old_state = state; -#endif - state = updating_e; - - if (in->key_id != 255) { - VERBOSE (crypto, WARNING, PRINTF ("incorrect ERRASE_KEY message\n")); - } - -#ifdef PROTOCOL_EXT - for (int i = 0; i < NB_CHANNELS; i++) { - if (channels[i]) { - VERBOSE (crypto, WARNING, PRINTF ("key (%d) is still associated to a channel (%d)\n", channels[i] - 1, i)); - state = old_state; - out->status = error_e; - return 0; - } - } -#endif - - 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)); - -#ifndef PROTOCOL_EXT - state = ready_e; -#else - state = initializing_e; -#endif - - out->status = ok_e; - - return 0; -} - -int associate_channel_func (CHANNEL_t *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("associate_channel_func\n")); - - //FIXIT: not thread safe -#ifdef PROTOCOL_EXT - state_t old_state = state; -#endif - state = updating_e; - - int cid = in->channel_id; - int kid = in->key_id; - -#ifdef PROTOCOL_EXT - if (keys[kid] == NULL) { - VERBOSE (crypto, WARNING, PRINTF ("can't associate channnel id to empty key (%d)\n", kid)); - state = old_state; - out->status = error_e; - } else { - channels[cid] = kid + 1; - state = ready_e; - out->status = ok_e; - } -#else - channels[cid] = kid + 1; - state = ready_e; - out->status = ok_e; -#endif - - return 0; -} - -int dissociate_channel_func (CHANNEL_t *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("dissociate_channel_func\n")); - - //FIXIT: not thread safe -#ifdef PROTOCOL_EXT - state_t old_state = state; -#endif - state = updating_e; - - int cid = in->channel_id; - -#ifdef PROTOCOL_EXT - if (channels[cid] == 0) { - VERBOSE (crypto, WARNING, PRINTF ("no key associated to channnel id (%d)\n", cid)); - state = old_state; - out->status = error_e; - } else if (keys[channels[cid] - 1] == NULL) { - VERBOSE (crypto, WARNING, PRINTF ("can't dissociate channnel id to empty key (%d)\n", cid)); - state = old_state; - out->status = error_e; - } else { - channels[cid] = 0; - state_t _state = initializing_e; - for (int i = 0; i < NB_CHANNELS; i++) { - if (channels[i] != 0) { - _state = ready_e; - } - } - state = _state; - out->status = ok_e; - } -#else - if (channels[cid]) { - channels[cid] = 0; - out->status = ok_e; - } else { - VERBOSE (crypto, WARNING, PRINTF ("no key associated to channnel id (%d)\n", cid)); - out->status = error_e; - } - state = ready_e; -#endif - - return 0; -} - -int bypass_func (RAW_DATA_t *in, RAW_DATA_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("bypass_func\n")); - - BYPASS_t pdu_bypass = {0}; - deserial_bypass (in->data, in->data_len, &pdu_bypass); - if (content_filter (&pdu_bypass)) { - VERBOSE (crypto, WARNING, PRINTF ("bypass message filtered\n")); - out->data_len = 0; - } else if (out != in) { - memcpy (out->data, in->data, in->data_len * sizeof (uint8_t)); - out->data_len = in->data_len; - } - - return (out->data_len > 0); -} - -int random_func (PRNG_PARAM_t *in, RAW_DATA_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("random_func\n")); - - switch (in->prng_id) { - case 0: - switch (in->seed_len) { - case 0: - srand (0); - break; - case 1: - srand (in->seed[0]); - break; - case 2: - srand (in->seed[0] + 256 * in->seed[1]); - break; - case 3: - srand (in->seed[0] + 256 * in->seed[1] + 65536 * in->seed[2]); - break; - case 4: - default: - srand (in->seed[0] + 256 * in->seed[1] + 65536 * in->seed[2] + 16777216 * in->seed[3]); - break; - } - out->data_len = in->seq_len; - for (int i = 0, r = 0; i < in->seq_len; i++) { - if (i % 4) { - r = rand (); - } - out->data[i] = r & 0xff; - r >>= 8; - } - break; - default: - } - - return 0; -} - -int status_func (void __attribute__ ((unused)) *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("status_func\n")); - - out->status = state; - - return 0; -} - -int authentification_func (RAW_DATA_t *in, RAW_DATA_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("authentification_func\n")); - - char *secret_message = "Secret passphrase"; - char *correct_answer = "Authenticated"; - char *wrong_answer = "Not authenticated"; - - if ((strlen (secret_message) == in->data_len) && - (memcmp (secret_message, in->data, in->data_len) == 0)) { - out->data_len = strlen (correct_answer); - memcpy (out->data, correct_answer, out->data_len); - state = initializing_e; - //state = error_e; - } else { - out->data_len = strlen (wrong_answer); - memcpy (out->data, wrong_answer, out->data_len); - state = starting_e; - } - - return 0; -} - -int reboot_func (void __attribute__ ((unused)) *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("reboot_func\n")); - - // FIXIT: not thread safe - state = booting_e; - - out->status = ok_e; - - return 0; -} - -int zeroize_func (void __attribute__ ((unused)) *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("zeroize_func\n")); - - // FIXIT: not thread safe - state = updating_e; - - clean_crypto_memory (); - -#ifdef PROTOCOL_EXT - state = initializing_e; -#else - state = ready_e; -#endif - - out->status = ok_e; - - return 0; -} - -int lock_crypto_func (void __attribute__ ((unused)) *in, STATUS_t *out) -{ - VERBOSE (crypto, TRACE, PRINTF ("lock_crypto_func\n")); - - // FIXIT: not thread safe - state = shutdowning_e; - - out->status = ok_e; - - return 0; -} - -void clean_crypto_memory (void) -{ - VERBOSE (crypto, TRACE, PRINTF ("clean_crypto_memory\n")); - - for (int i = 0; i < NB_KEYS; i++) { - 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)); -} - -/* vim: set ts=4 sw=4 si et: */ diff --git a/function.h b/function.h deleted file mode 100644 index 8344f2d..0000000 --- a/function.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - File name : function.h - Projet : MERLIN - Date of creation : 2025/05/02 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : Crypto Module functions - - History : - - initial version -*/ - -#ifndef __FUNCTION_H__ -#define __FUNCTION_H__ - -#include -#include - -#include "pdu_channel.h" -#include "pdu_encrypted_data.h" -#include "pdu_prng_param.h" -#include "pdu_status.h" -#include "pdu_clear_data.h" -#include "pdu_key.h" -#include "pdu_raw_data.h" -#include "pdu_raw_data.h" - -__BEGIN_DECLS - -int encrypt_func (CLEAR_DATA_t *in, ENCRYPTED_DATA_t *out); - -int decrypt_func (ENCRYPTED_DATA_t *in, CLEAR_DATA_t *out); - -int load_key_func (KEY_t *in, STATUS_t *out); - -int unload_key_func (KEY_t *in, STATUS_t *out); - -int erase_key_func (KEY_t *in, STATUS_t *out); - -int associate_channel_func (CHANNEL_t *in, STATUS_t *out); - -int dissociate_channel_func (CHANNEL_t *in, STATUS_t *out); - -int bypass_func (RAW_DATA_t *in, RAW_DATA_t *out); - -int random_func (PRNG_PARAM_t *in, RAW_DATA_t *out); - -int status_func (void *in, STATUS_t *out); - -int authentification_func (RAW_DATA_t *in, RAW_DATA_t *out); - -int reboot_func (void *in, STATUS_t *out); - -int zeroize_func (void *in, STATUS_t *out); - -int lock_crypto_func (void *in, STATUS_t *out); - -void clean_crypto_memory (void); - -__END_DECLS - -#endif /* __FUNCTION_H__ */ - -/* vim: set ts=4 sw=4 si et: */ diff --git a/makefile b/makefile index 31c91c1..042644c 100644 --- a/makefile +++ b/makefile @@ -99,7 +99,7 @@ clean: depends: $(patsubst %.c, %.d, $(wildcard *.c)) $(patsubst %, %.ld, $(ALLEXE)) -documentation: doxygen.conf morep.c morep.h parse.h $(wildcard pdu_*.h) simulator.h +documentation: doxygen.conf morep.c morep.h parse.h $(wildcard pdu_*.h) doxygen $<; true sed -i s/__BEGIN_DECLS//g documentation/html/*.html sed -i s/\\_\\-\\_BEGIN\\_\\-DECLS//g documentation/latex/*.tex diff --git a/simulator.c b/simulator.c deleted file mode 100644 index 516c49a..0000000 --- a/simulator.c +++ /dev/null @@ -1,678 +0,0 @@ -/* - File name : simulator.c - Projet : MERLIN - Date of creation : 2025/04/09 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : MOREP simulator - - History : - - initial version -*/ - -/* depend: */ -/* cflags: */ -/* linker: morep.o parse.o pdu_channel.o pdu_encrypted_data.o pdu_prng_param.o pdu_status.o pdu_clear_data.o pdu_key.o pdu_raw_data.o */ - -#include -#include -#include -#include -#include -#include -#include - -#include "def.h" -#include "morep.h" -#include "parse.h" -#include "pdu_channel.h" -#include "pdu_clear_data.h" -#include "pdu_encrypted_data.h" -#include "pdu_key.h" -#include "pdu_prng_param.h" -#include "pdu_raw_data.h" -#include "pdu_status.h" -#include "simulator.h" -#include "verbose.h" - -char *progname = NULL; - -int stop = 0; - -DECLARE_VERBOSE_LEVEL (simul, INFO); - -#define BUFMAX 4096 - -/* definition of all messages */ -message_t message_list[] = { - - /* Cross cryptographic service */ - {"ENCRYPT_CROSS_ASYNC", cross_crypto_e, 0x00, clear_data_e}, - {"ENCRYPTED_CROSS_ASYNC", cross_crypto_e, 0x01, encrypted_data_e}, - {"DECRYPT_CROSS_ASYNC", cross_crypto_e, 0x02, encrypted_data_e}, - {"DECRYPTED_CROSS_ASYNC", cross_crypto_e, 0x03, clear_data_e}, - - /* Local cryptographic service */ - {"ENCRYPT_LOCAL_REQ", local_crypto_e, 0x00, clear_data_e}, - {"ENCRYPTED_LOCAL_RESP", local_crypto_e, 0x01, encrypted_data_e}, - {"DECRYPT_LOCAL_REQ", local_crypto_e, 0x02, encrypted_data_e}, - {"DECRYPTED_LOCAL_RESP", local_crypto_e, 0x03, clear_data_e}, - - /* Provisioning service */ - {"LOAD_KEY_REQ", provisioning_e, 0x00, key_e}, - {"LOAD_KEY_RESP", provisioning_e, 0x01, status_e}, - {"UNLOAD_KEY_REQ", provisioning_e, 0x02, key_e}, - {"UNLOAD_KEY_RESP", provisioning_e, 0x03, status_e}, - {"ERASE_KEY_REQ", provisioning_e, 0x04, key_e}, - {"ERASE_KEY_RESP", provisioning_e, 0x05, status_e}, - {"ASSOCIATE_CHANNEL_REQ", provisioning_e, 0x06, channel_e}, - {"ASSOCIATE_CHANNEL_RESP", provisioning_e, 0x07, status_e}, - {"DISSOCIATE_CHANNEL_REQ", provisioning_e, 0x08, channel_e}, - {"DISSOCIATE_CHANNEL_RESP", provisioning_e, 0x09, status_e}, - - /* Bypass service */ - {"BYPASS_CROSS_ASYNC", bypass_e, 0x00, raw_data_e}, - {"BYPASSED_CROSS_ASYNC", bypass_e, 0x01, raw_data_e}, - - /* PRNG service */ - {"RANDOM_REQ", prng_e, 0x00, prng_param_e}, - {"RANDOM_RESP", prng_e, 0x01, raw_data_e}, - - /* Control service */ - {"STATUS_REQ", control_e, 0x00, nopdu_e}, - {"STATUS_RESP", control_e, 0x01, status_e}, - {"AUTHENTICATION_REQ", control_e, 0x02, raw_data_e}, - {"AUTHENTICATION_RESP", control_e, 0x03, raw_data_e}, - {"REBOOT_REQ", control_e, 0x04, nopdu_e}, - {"REBOOT_RESP", control_e, 0x05, status_e}, - {"ZEROIZE_REQ", control_e, 0x06, nopdu_e}, - {"ZEROIZE_RESP", control_e, 0x07, status_e}, - {"LOCK_CRYPTO_REQ", control_e, 0xFE, nopdu_e}, - {"LOCK_CRYPTO_RESP", control_e, 0xFF, status_e}, - - /* End of list */ - {"", noserv_e, 0x00, undef_pdu_e} -}; - -/* list of communcation chanels */ -#define MAXCOMMS 32 -comm_t comm_list[MAXCOMMS] = {0}; - -/* definition of all services */ -service_t service_list[] = { - {"CROSS_CRYPTO_BLACK", cross_crypto_e, {-1, 0, "0809"}, {-1, 1, "0809"}}, - {"CROSS_CRYPTO_RED", cross_crypto_e, {-1, 0, "0809"}, {-1, 1, "0809"}}, - {"CROSS_CRYPTO", cross_crypto_e, {-1, 0, "0809"}, {-1, 1, "0809"}}, - {"LOCAL_CRYPTO_BLACK", local_crypto_e, {-1, 0, "080a"}, {-1, 1, "080a"}}, - {"LOCAL_CRYPTO_RED", local_crypto_e, {-1, 0, "080a"}, {-1, 1, "080a"}}, - {"LOCAL_CRYPTO", local_crypto_e, {-1, 0, "080a"}, {-1, 1, "080a"}}, - {"PROVISIONING_RED", provisioning_e, {-1, 0, "080b"}, {-1, 1, "080b"}}, - {"PROVISIONING", provisioning_e, {-1, 0, "080b"}, {-1, 1, "080b"}}, - {"PRNG_BLACK", prng_e, {-1, 0, "080c"}, {-1, 1, "080c"}}, - {"PRNG_RED", prng_e, {-1, 0, "080c"}, {-1, 1, "080c"}}, - {"PRNG", prng_e, {-1, 0, "080c"}, {-1, 1, "080c"}}, - {"BYPASS_BLACK", bypass_e, {-1, 0, "080d"}, {-1, 1, "080d"}}, - {"BYPASS_RED", bypass_e, {-1, 0, "080d"}, {-1, 1, "080d"}}, - {"BYPASS", bypass_e, {-1, 0, "080d"}, {-1, 1, "080d"}}, - {"CONTROL_RED", control_e, {-1, 0, "080e"}, {-1, 1, "080e"}}, - {"CONTROL", control_e, {-1, 0, "080e"}, {-1, 1, "080e"}}, - {"", noserv_e, {-1, 0, "0000"}, {-1, 1, "0000"}} -}; - -/* signal handler */ -void sig_handler (int sig) -{ - switch (sig) { - case SIGINT: - //stop = 1; - exit (0); - break; - case SIGTERM: - exit (0); - break; - } -} - -/* read a file */ -char *read_stream (FILE *sd, int *plen) -{ - VERBOSE (simul, TRACE, PRINTF ("read_stream\n")); - - /* read and store */ - char *buffer = NULL; - size_t size = 0; - int blocklen = 0; - int length = 0; - do { - size += BUFMAX + (size == 0); - buffer = (char *) realloc (buffer, size); - memset (buffer + size - BUFMAX - 1, 0, BUFMAX + 1); - blocklen = fread (buffer + size - BUFMAX - 1, 1, BUFMAX, sd); - length += blocklen; - } while (blocklen > 0); - - /* check size */ - VERBOSE (simul, DEBUG, PRINTF ("read length: %d\n", length)); - if (length == 0) { - free (buffer); - buffer = NULL; - } - - if (plen) { - *plen = length; - } - - return buffer; -} - -/* main function */ -int main (int argc, char **argv) -{ - char *filename = NULL; - char *logname = NULL; - char *servname = NULL; - char *tmp = NULL; - char *url = NULL; - int mode = -1; - int nbcomms = 0; - - /* get basename */ - char *ptr = progname = argv[0]; - while (*ptr) { - if ((*ptr == '/') || (*ptr == '\\')) { - progname = ptr + 1; - } - ptr++; - } - - /* process argument */ - while (argc-- > 1) { - char *arg = *(++argv); - if (arg[0] != '-') { - filename = arg; - continue; - } - char c = arg[1]; - switch (c) { - case 'l': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (simul, ERROR, PRINTF ("%s: log file not specified\n", progname)); - return 1; - } - logname = arg; - break; - case 'r': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (simul, ERROR, PRINTF ("%s: receiver url not specified\n", progname)); - return 1; - } - url = arg; - mode = 0; - break; - case 's': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (simul, ERROR, PRINTF ("%s: service not specified\n", progname)); - return 1; - } - servname = arg; - break; - case 't': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (simul, ERROR, PRINTF ("%s: transmitter url not specified\n", progname)); - return 1; - } - url = arg; - mode = 1; - break; - case 'v': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (simul, ERROR, PRINTF ("%s: morep verbose level not specified\n", progname)); - return 1; - } - CHANGE_VERBOSE_LEVEL (morep, atoi (arg)); - break; - case 'V': - arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; - if (arg == NULL) { - VERBOSE (simul, ERROR, PRINTF ("%s: simulator verbose level not specified\n", progname)); - return 1; - } - CHANGE_VERBOSE_LEVEL (simul, atoi (arg)); - break; - case 'h': - default: - printf ("usage: %s [-h] [-l log] [-r url] [-s serv] [-t url] [-v level] [-V level] [file]\n", progname); - return (c != 'h'); - } - - /* init communication channel */ - if (mode != -1) { - if (nbcomms < MAXCOMMS) { - int morep = MOREP_Connect (url); - if (morep >= 0) { - (comm_list + nbcomms)->morep = morep; - (comm_list + nbcomms)->mode = mode; - (comm_list + nbcomms)->etype = strrchr (url, '/') + 1; - for (int i = 0; (service_list + i)->service_id != noserv_e; i++) { - service_t *s = service_list + i; - if (s && servname && (strcmp (s->name, servname) == 0)) { - memcpy ((mode == 0) ? &(s->rx) : &(s->tx), comm_list + nbcomms, sizeof (comm_t)); - break; - } - } - nbcomms++; - } else { - VERBOSE (simul, ERROR, PRINTF ("can't connect on url '%s'\n", url)); - return -1; - } - } else { - VERBOSE (simul, ERROR, PRINTF ("no more communication channel avaliable (%d)\n", nbcomms)); - return -1; - } - mode = -1; - } - } - - /* checks */ - if (nbcomms == 0) { - VERBOSE (simul, ERROR, PRINTF ("no communication channel\n")); - return -1; - } - - /* open script file */ - FILE *fid = stdin; - if (filename != NULL) { - fid = fopen (filename, "r"); - if (fid == NULL) { - VERBOSE (simul, ERROR, PRINTF ("can't open script file '%s' for reading\n", filename)); - return -1; - } - } - char *script = read_stream (fid, NULL); - if (fid != stdin) { - fclose (fid); - } - if (script == NULL) { - VERBOSE (simul, ERROR, PRINTF ("no script read\n")); - return -1; - } - - /* open log file */ - FILE *log = NULL; - if (logname != NULL) { - if (strcmp (logname, "-") == 0) { - log = stdout; - } else { - log = fopen (logname, "w"); - if (log == NULL) { - VERBOSE (simul, ERROR, PRINTF ("can't open log file '%s' for writing\n", logname)); - return -1; - } - } - } - - /* signals */ - signal(SIGINT, sig_handler); - signal(SIGTERM, sig_handler); - - /* main loop */ - int rc = 0; - ptr = script; - while (*ptr != '\0') { - - /* read line */ - char *line = ptr; - TEST_CHARS (ptr, "\n\r", 1); - *ptr++ = '\0'; - - /* skip space, avoid empty line and comments */ - TEST_CHARS (line, " \t", 0); - if ((*line == '\0') || (*line == '#')) { - continue; - } - - /* special keywords */ - if (strncmp (line, "SLEEP", 5) == 0) { - int duration = atoi (line + 5); - VERBOSE (simul, INFO, PRINTF ("sleep %dms\n", duration)); - usleep (duration * 1000); - continue; - } - - /* analyse line */ - mode = (*line == 'R') ? 0 : (*line == 'T') ? 1 : -1; - if (mode == -1) { - VERBOSE (simul, WARNING, PRINTF ("unrecognize line '%s'\n", line)); - continue; - } - int offset = 1; - - /* skip space */ - tmp = line + offset; - TEST_CHARS (tmp, " \t:", 0); - offset = tmp - line; - - comm_t *comm = NULL; - service_t *serv = NULL; - /* find MOREP by service name */ - for (int i = 0; ((service_list + i)->service_id != noserv_e) && (serv == NULL); i++) { - service_t *s = service_list + i; - VERBOSE (simul, TRACE, PRINTF ("test %c[%s]\n", *line, s->name)); - if (strncmp (line + offset, s->name, strlen (s->name)) == 0) { - comm = (mode == 0) ? &(s->rx) : &(s->tx); - serv = s; - offset += strlen (s->name); - } - } - /* find MOREP by ethertype */ - for (int j = 0; (j < nbcomms) && (comm == NULL); j++) { - comm_t *c = comm_list + j; - VERBOSE (simul, TRACE, PRINTF ("test %c[%s]\n", (c->mode == 0) ? 'R' : 'T', c->etype)); - if ((strncmp (line + offset, c->etype, strlen (c->etype)) == 0) && (c->mode == mode)) { - comm = c; - for (int i = 0; ((service_list + i)->service_id != noserv_e) && (serv == NULL); i++) { - service_t *s = service_list + i; - c = (mode == 0) ? &(s->rx) : &(s->tx); - if (strncmp (c->etype, comm->etype, strlen (comm->etype)) == 0) { - serv = s; - } - } - offset += strlen (c->etype); - } - } - /* check media and service */ - if ((comm == NULL) || (serv == NULL)) { - VERBOSE (simul, TRACE, PRINTF ("no morep found '%s'\n", line)); - continue; - } - VERBOSE (simul, DEBUG, PRINTF ("select %c[%s]\n", (comm->mode == 0) ? 'R' : 'T', serv->name)); - - /* skip space */ - tmp = line + offset; - TEST_CHARS (tmp, " \t", 0); - offset = tmp - line; - - message_t *msg = NULL; - /* get message type by name */ - for (int i = 0; ((message_list + i)->service_id != noserv_e) && (msg == NULL); i++) { - message_t *m = message_list + i; - VERBOSE (simul, TRACE, PRINTF ("test %s\n", m->name)); - if (strncmp (line + offset, m->name, strlen (m->name)) == 0) { - msg = m; - offset += strlen (m->name); - } - } - /* get message type by id */ - if (msg == NULL) { - if (strncmp (line + offset, "MSG", 3) != 0) { - VERBOSE (simul, WARNING, PRINTF ("can't parse line '%s' (%d)\n", line, offset)); - continue; - } - tmp = line + offset + 3; - TEST_CHARS (tmp, " \t=", 0); - uint8_t msgtype = strtol (tmp, &tmp, 0); - offset = tmp - line; - if ((*tmp != ' ') && (*tmp != '\t')) { - VERBOSE (simul, WARNING, PRINTF ("can't parse line '%s' (%d)\n", line, offset)); - continue; - } - /* find message */ - for (int i = 0; ((message_list + i)->service_id != noserv_e) && (msg == NULL); i++) { - message_t *m = message_list + i; - if ((m->service_id == serv->service_id) && (m->msgtype == msgtype)) { - msg = m; - } - } - /* avoid null pointer */ - if (msg == NULL) { - VERBOSE (simul, WARNING, PRINTF ("can't find msgtype %d for service %s\n", msgtype, serv->name)); - continue; - } - - } - - /* check message and service */ - if (serv->service_id != msg->service_id) { - VERBOSE (simul, WARNING, PRINTF ("message %s is not allowed for service %s (line '%s')\n", msg->name, serv->name, line)); - continue; - } - VERBOSE (simul, DEBUG, PRINTF ("%s message %s\n", (comm->mode == 0) ? "waiting" : "sending", msg->name)); - - CHANNEL_t pdu_channel = {0}; - CLEAR_DATA_t pdu_clear_data = {0}; - ENCRYPTED_DATA_t pdu_encrypted_data = {0}; - KEY_t pdu_key = {0}; - PRNG_PARAM_t pdu_prng_param = {0}; - RAW_DATA_t pdu_raw_data = {0}; - STATUS_t pdu_status = {0}; - - int seqnum = -1; - int len = 0; - pdu_t pdu; - if (mode == 1) { /* transmit */ - - /* parse message */ - pdu = msg->pdu; - switch (pdu) { - case nopdu_e: - break; - case channel_e: - parse_channel (line + offset, &pdu_channel); - break; - case clear_data_e: - parse_clear_data (line + offset, &pdu_clear_data); - break; - case encrypted_data_e: - parse_encrypted_data (line + offset, &pdu_encrypted_data); - break; - case key_e: - parse_key (line + offset, &pdu_key); - break; - case prng_param_e: - parse_prng_param (line + offset, &pdu_prng_param); - break; - case raw_data_e: - parse_raw_data (line + offset, &pdu_raw_data); - break; - case status_e: - parse_status (line + offset, &pdu_status); - break; - default: - VERBOSE (simul, WARNING, PRINTF ("can't parse line '%s' (%d)\n", line, offset)); - continue; - } - - /* send message */ - uint8_t payload[MOREP_PAYLOAD] = {0}; - switch (pdu) { - case channel_e: - len = serial_channel (&pdu_channel, payload, sizeof (payload)); - break; - case clear_data_e: - len = serial_clear_data (&pdu_clear_data, payload, sizeof (payload)); - break; - case encrypted_data_e: - len = serial_encrypted_data (&pdu_encrypted_data, payload, sizeof (payload)); - break; - case key_e: - len = serial_key (&pdu_key, payload, sizeof (payload)); - break; - case prng_param_e: - len = serial_prng_param (&pdu_prng_param, payload, sizeof (payload)); - break; - case raw_data_e: - len = serial_raw_data (&pdu_raw_data, payload, sizeof (payload)); - break; - case status_e: - len = serial_status (&pdu_status, payload, sizeof (payload)); - break; - default: - len = 0; - } - seqnum = MOREP_Send (comm->morep, msg->msgtype, payload, len); - VERBOSE (simul, INFO, PRINTF ("T:%s[%s] [SEQ=%d MSG=%d LEN=%d PDU=%d] %s\n", serv->name, comm->etype, seqnum, msg->msgtype, len, pdu, msg->name)); - - } else { /* receive */ - message_t *exp_msg = msg; - - uint8_t msgtype = 0; - uint8_t payload[MOREP_PAYLOAD] = {0}; - seqnum = MOREP_Receive (comm->morep, &msgtype, payload, &len); - - /* check msg/pdu type */ - pdu = undef_pdu_e; - msg = NULL; - for (int i = 0; ((message_list + i)->service_id) && (pdu == undef_pdu_e); i++) { - message_t *m = message_list + i; - if ((m->service_id == serv->service_id) && (m->msgtype == msgtype)) { - pdu = m->pdu; - msg = m; - } - } - /* check msg type */ - if (msg == NULL) { - VERBOSE (simul, WARNING, PRINTF ("R:%s[%s] [SEQ=%d MSG=%d LEN=%d PDU=%d] message type is not allowed for this service\n", serv->name, comm->etype, seqnum, msgtype, len, pdu)); - continue; - } - if (exp_msg->msgtype != msg->msgtype) { - VERBOSE (simul, WARNING, PRINTF ("R:%s[%s] [SEQ=%d MSG=%d LEN=%d PDU=%d] expected message type %s\n", serv->name, comm->etype, seqnum, msg->msgtype, len, pdu, exp_msg->name)); - continue; - } - VERBOSE (simul, INFO, PRINTF ("R:%s[%s] [SEQ=%d MSG=%d LEN=%d PDU=%d] %s\n", serv->name, comm->etype, seqnum, msg->msgtype, len, pdu, msg->name)); - - /* deserialize message */ - switch (pdu) { - case nopdu_e: - break; - case channel_e: - deserial_channel (payload, len, &pdu_channel); - break; - case clear_data_e: - deserial_clear_data (payload, len, &pdu_clear_data); - break; - case encrypted_data_e: - deserial_encrypted_data (payload, len, &pdu_encrypted_data); - break; - case key_e: - deserial_key (payload, len, &pdu_key); - break; - case prng_param_e: - deserial_prng_param (payload, len, &pdu_prng_param); - break; - case raw_data_e: - deserial_raw_data (payload, len, &pdu_raw_data); - break; - case status_e: - deserial_status (payload, len, &pdu_status); - break; - default: - VERBOSE (simul, WARNING, PRINTF ("can't deserialize message %s\n", msg->name)); - continue; - } - - /* check received pdu */ - if (pdu == channel_e) { - CHANNEL_t exp_pdu_channel = {0}; - int check_fields = parse_channel (line + offset, &exp_pdu_channel); - check_channel (&pdu_channel, &exp_pdu_channel, check_fields); - } else if (pdu == clear_data_e) { - CLEAR_DATA_t exp_pdu_clear_data = {0}; - int check_fields = parse_clear_data (line + offset, &exp_pdu_clear_data); - check_clear_data (&pdu_clear_data, &exp_pdu_clear_data, check_fields); - } else if (pdu == encrypted_data_e) { - ENCRYPTED_DATA_t exp_pdu_encrypted_data = {0}; - int check_fields = parse_encrypted_data (line + offset, &exp_pdu_encrypted_data); - check_encrypted_data (&pdu_encrypted_data, &exp_pdu_encrypted_data, check_fields); - } else if (pdu == key_e) { - KEY_t exp_pdu_key = {0}; - int check_fields = parse_key (line + offset, &exp_pdu_key); - check_key (&pdu_key, &exp_pdu_key, check_fields); - } else if (pdu == prng_param_e) { - PRNG_PARAM_t exp_pdu_prng_param = {0}; - int check_fields = parse_prng_param (line + offset, &exp_pdu_prng_param); - check_prng_param (&pdu_prng_param, &exp_pdu_prng_param, check_fields); - } else if (pdu == raw_data_e) { - RAW_DATA_t exp_pdu_raw_data = {0}; - int check_fields = parse_raw_data (line + offset, &exp_pdu_raw_data); - check_raw_data (&pdu_raw_data, &exp_pdu_raw_data, check_fields); - } else if (pdu == status_e) { - STATUS_t exp_pdu_status = {0}; - int check_fields = parse_status (line + offset, &exp_pdu_status); - check_status (&pdu_status, &exp_pdu_status, check_fields); - } - - } - - /* log message */ - if (log) { - fprintf (log, "%c:%s[%s] [SEG=%d MSG=%d LEN=%d PDU=%d] %s", (mode == 0) ? 'R' : 'T', - serv->name, comm->etype, seqnum, msg->msgtype, len, pdu, msg->name); - char buffer[MOREP_PAYLOAD * 3 + 256] = {0}; - switch (pdu) { - case nopdu_e: - break; - case channel_e: - format_channel (&pdu_channel, buffer, sizeof (buffer)); - break; - case clear_data_e: - format_clear_data (&pdu_clear_data, buffer, sizeof (buffer)); - break; - case encrypted_data_e: - format_encrypted_data (&pdu_encrypted_data, buffer, sizeof (buffer)); - break; - case key_e: - format_key (&pdu_key, buffer, sizeof (buffer)); - break; - case prng_param_e: - format_prng_param (&pdu_prng_param, buffer, sizeof (buffer)); - break; - case raw_data_e: - format_raw_data (&pdu_raw_data, buffer, sizeof (buffer)); - break; - case status_e: - format_status (&pdu_status, buffer, sizeof (buffer)); - break; - default: - snprintf (buffer, sizeof (buffer), "unknown payload"); - } - fprintf (log, "%s\n", buffer); - } - } - - /* cleaning */ - free (script); - while (nbcomms) { - MOREP_Close (--nbcomms); - } - if ((log) && (log != stdout)) { - fclose (log); - } - - return rc + GET_VERBOSE_ERRORS (morep) + GET_VERBOSE_ERRORS (simul); -} - -/* test: simulator.exe -h | grep usage */ -/* test: simulator.exe -l | grep 'log file not specified' */ -/* test: simulator.exe -r | grep 'url not specified' */ -/* test: simulator.exe -s | grep 'service not specified' */ -/* test: simulator.exe -t | grep 'url not specified' */ -/* test: simulator.exe -v | grep 'morep verbose level not specified' */ -/* test: simulator.exe -V | grep 'simulator verbose level not specified' */ -/* test: simulator.exe -l - -t lo://00:00:00:00:00:00/0809 -v 4 test/script-lo.eth */ -/* test: simulator.exe -l script-cross_crypto-error.log -s CROSS_CRYPTO -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-cross_crypto-error.eth -V 3; test $? -ne 0 */ -/* test: simulator.exe -l script-cross_crypto-error.log -s CROSS_CRYPTO -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-cross_crypto-error.eth -V 3 | grep WARNING */ -/* test: simulator.exe -l script-cross_crypto.log -s CROSS_CRYPTO -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-cross_crypto.eth -V 3 */ -/* test: simulator.exe -l script-local_crypto.log -s LOCAL_CRYPTO -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-local_crypto.eth -V 3 */ -/* test: simulator.exe -l script-provisioning.log -s PROVISIONING -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-provisioning.eth -V 3 */ -/* test: simulator.exe -l script-prng.log -s PRNG -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-prng.eth -V 3 */ -/* test: simulator.exe -l script-bypass.log -s BYPASS -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-bypass.eth -V 3 */ -/* test: simulator.exe -l script-control.log -s CONTROL -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 test/script-control.eth -v 3 -V 3 */ - -/* vim: set ts=4 sw=4 si et: */ diff --git a/simulator.h b/simulator.h deleted file mode 100644 index 9b57a4e..0000000 --- a/simulator.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - File name : simulator.h - Projet : MERLIN - Date of creation : 2025/04/10 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : This file defines simulator types - - History : - - initial version -*/ - -#ifndef __SIMULATOR_H__ -#define __SIMULATOR_H__ - -#include -#include - -__BEGIN_DECLS - -/** - @defgroup SIMULATOR Public API of SIMULATOR - -*/ - -/** - @ingroup SIMULATOR - - Module enumarate values -*/ -typedef enum { - nomod_e = 0, /**< no module defined*/ - red_e, /**< red radio module */ - cryp_e, /**< cryptographic module */ - black_e /**< black radio module */ -} module_t; - -/** - @ingroup SIMULATOR - - Service enumarate values -*/ -typedef enum { - noserv_e = 0, /**< no service defined */ - cross_crypto_e, /**< cross cryptographic service */ - local_crypto_e, /**< local cryptographic service */ - provisioning_e, /**< provisioning service */ - prng_e, /**< PRNG service */ - bypass_e, /**< bypass service */ - control_e /**< controlservice */ -} service_id_t; - -/** - @ingroup SIMULATOR - - PDU enumarate values -*/ -typedef enum { - undef_pdu_e = 0, /**< undefined PDU */ - channel_e, /**< CHANNEL_t PDU */ - clear_data_e, /**< CLEAR_DATA_t PDU */ - encrypted_data_e, /**< ENCRYPTED_DATA_t PDU */ - key_e, /**< KEY_t PDU */ - prng_param_e, /**< PRNG_PARAM_t PDU */ - raw_data_e, /**< RAW_DATA_t PDU */ - status_e, /**< STATUS_t PDU */ - nopdu_e /**< no PDU */ -} pdu_t; - -/** - @ingroup SIMULATOR - - Message type -*/ -typedef struct { - char *name; /**< message name */ - service_id_t service_id; /**< associated service id */ - uint8_t msgtype; /**< message id */ - pdu_t pdu; /**< associated PDU type */ -} message_t; - -/** - @ingroup SIMULATOR - - Communition channel type -*/ -typedef struct { - int morep; /**< referent MOREP index */ - int mode; /**< transmission mode: 0 for TX, 1 for RX */ - char *etype; /**< associated Ethertype in a string format */ -} comm_t; - -/** - @ingroup SIMULATOR - - Service type -*/ -typedef struct { - char *name; /**< service name */ - service_id_t service_id; /**< service id */ - comm_t tx; /**< associated TX communication channel */ - comm_t rx; /**< assiciated RX communication channel */ -} service_t; - -#endif /* __SIMULATOR_H__ */ - -/* vim: set ts=4 sw=4 si et: */ diff --git a/simulator/decrypt.py b/simulator/decrypt.py deleted file mode 100755 index 3e5fa0d..0000000 --- a/simulator/decrypt.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/env python3 - -#import os -from cryptography.hazmat.primitives.ciphers.aead import AESGCM - -# Read file -with open('key.txt', 'rb') as infile: - key = infile.read() -with open('iv.txt', 'rb') as infile: - nonce = infile.read() -with open('encrypted.txt', 'rb') as infile: - data = infile.read() - -# Encryption -aad = None -aesgcm = AESGCM(key) -plaintxt = aesgcm.decrypt(nonce, data, aad) - -# Writing - -with open('decrypted.txt', 'wb+') as outfile: - outfile.write(plaintxt) diff --git a/simulator/encrypt.py b/simulator/encrypt.py deleted file mode 100755 index d8170dd..0000000 --- a/simulator/encrypt.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/env python3 - -import os -from cryptography.hazmat.primitives.ciphers.aead import AESGCM - -# Read file -with open('key.txt', 'rb') as infile: - key = infile.read() -with open('plaintext.txt', 'rb') as infile: - data = infile.read() - -# Encryption -aad = None -aesgcm = AESGCM(key) -nonce = os.urandom(12); -ciphertxt = aesgcm.encrypt(nonce, data, aad) - -# Writing -with open('encrypted.txt', 'wb+') as outfile: - outfile.write(ciphertxt) -with open('iv.txt', 'wb+') as outfile: - outfile.write(nonce) diff --git a/simulator/key.txt b/simulator/key.txt deleted file mode 100644 index 97eee9a..0000000 --- a/simulator/key.txt +++ /dev/null @@ -1 +0,0 @@ -This is a very smart pass phrase \ No newline at end of file diff --git a/simulator/makefile b/simulator/makefile deleted file mode 100644 index ebe1fb2..0000000 --- a/simulator/makefile +++ /dev/null @@ -1,16 +0,0 @@ -# -*- Makefile -*- - -PYTHON = python3 -SHELL = bash - -compare: decrypted.txt plaintext.txt - cmp $+ && echo -e "\033[1;32mOK\033[0;0m" || echo -e "\033[1;31mKO\033[0;0m" - -encrypted.txt iv.txt: encrypt.py key.txt plaintext.txt - $(PYTHON) $< - -decrypted.txt: decrypt.py key.txt iv.txt encrypted.txt - $(PYTHON) $< - -clean: - rm encrypted.txt iv.txt decrypted.txt diff --git a/simulator/plaintext.txt b/simulator/plaintext.txt deleted file mode 100644 index 8a1ef7c..0000000 --- a/simulator/plaintext.txt +++ /dev/null @@ -1,3 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque maximus euismod condimentum. Duis tempus elit sit amet justo molestie sodales. Quisque malesuada sodales tortor. Nunc a ornare justo. Vestibulum eu bibendum erat, at rutrum justo. Quisque pretium luctus pellentesque. Maecenas lectus nibh, dignissim sit amet justo non, sagittis auctor orci. - -Integer fringilla ipsum in sodales auctor. Phasellus magna quam, aliquet vitae nisl sit amet, gravida venenatis diam. Quisque at metus ornare, consectetur enim in, luctus neque. Quisque dignissim diam sit amet massa eleifend euismod. Phasellus nulla sem, feugiat ut bibendum nec, bibendum non odio. In pharetra, nibh vitae porta pharetra, dolor nunc fermentum neque, et lacinia tellus metus a ligula. Quisque aliquet ac leo a fringilla. Nunc porttitor vehicula ullamcorper. Ut vehicula lectus convallis neque mollis, et malesuada libero porta. diff --git a/simulator/script-black.eth b/simulator/script-black.eth deleted file mode 100644 index a1ab4d5..0000000 --- a/simulator/script-black.eth +++ /dev/null @@ -1,16 +0,0 @@ -# Black test script - -# key provisioning - -# radio configuration -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=@encrypted.txt - -# wait -SLEEP 1000 - -# receive data -T:CROSS_CRYPTO DECRYPT_CROSS_ASYNC CHANNELID=0 IV=@iv.txt DATA=@encrypted.txt - diff --git a/simulator/script-red.eth b/simulator/script-red.eth deleted file mode 100644 index 4557216..0000000 --- a/simulator/script-red.eth +++ /dev/null @@ -1,20 +0,0 @@ -# Red test script - -# key provisioning -T:PROVISIONING LOAD_KEY_REQ KEYID=0 KEY=@key.txt -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -# radio configuration -T:BYPASS BYPASS_CROSS_ASYNC DATA="Radio\ Configuration" -T:CONTROL STATUS_REQ -R:CONTROL STATUS_RESP STATUS=4 - -# send data -T:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=0 DATA=@plaintext.txt - -# wait -SLEEP 1000 - -# receive data -R:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 DATA=@decrypted.txt - diff --git a/simulator/script-secu.eth b/simulator/script-secu.eth deleted file mode 100644 index e57d73c..0000000 --- a/simulator/script-secu.eth +++ /dev/null @@ -1,23 +0,0 @@ -# Secu test script - -# key provisioning -R:PROVISIONING LOAD_KEY_REQ KEYID=0 KEY=@key.txt -T:PROVISIONING LOAD_KEY_RESP STATUS=0 - -# radio configuration -R:BYPASS_RED BYPASS_CROSS_ASYNC DATA="Radio\ Configuration" -T:BYPASS_BLACK BYPASSED_CROSS_ASYNC DATA="Radio\ Configuration" -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 -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 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/simulator/script-simulator.sh b/simulator/script-simulator.sh deleted file mode 100755 index 151c47c..0000000 --- a/simulator/script-simulator.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -[ "$SIMULATOR" ] || SIMULATOR=./simulator.exe - -ETH_RADIORED=enp0s4://52:54:00:12:34:57 -ETH_SECRED=enp0s4://52:54:00:12:34:59 -ETH_SECBLACK=enp0s4://52:54:00:12:34:59 -ETH_RADIOBLACK=enp0s4://52:54:00:12:34:57 - -case "$1" in -red) - #gdb $SIMULATOR --args \ - $SIMULATOR -l script-red.log \ - -s BYPASS -t $ETH_SECRED/080D -r $ETH_RADIORED/080D \ - -s CONTROL -t $ETH_SECRED/080E -r $ETH_RADIORED/080E \ - -s CROSS_CRYPTO -t $ETH_SECRED/0809 -r $ETH_RADIORED/0809 \ - -s PROVISIONING -t $ETH_SECRED/080B -r $ETH_RADIORED/080B \ - script-red.eth -v 3 -V 3 - ;; -secu) - #gdb $SIMULATOR --args \ - $SIMULATOR -l script-secu.log \ - -s BYPASS_BLACK -t $ETH_RADIOBLACK/081D -r $ETH_SECBLACK/081D \ - -s BYPASS_RED -t $ETH_RADIORED/080D -r $ETH_SECRED/080D \ - -s CONTROL -t $ETH_RADIORED/080E -r $ETH_SECRED/080E \ - -s CROSS_CRYPTO_BLACK -t $ETH_RADIOBLACK/0819 -r $ETH_SECBLACK/0819 \ - -s CROSS_CRYPTO_RED -t $ETH_RADIORED/0809 -r $ETH_SECRED/0809 \ - -s PROVISIONING -t $ETH_RADIORED/080B -r $ETH_SECRED/080B \ - script-secu.eth -v 3 -V 3 - ;; -black) - #gdb $SIMULATOR --args \ - $SIMULATOR -l script-black.log \ - -s BYPASS -t $ETH_SECBLACK/081D -r $ETH_RADIOBLACK/081D \ - -s CROSS_CRYPTO -t $ETH_SECBLACK/0819 -r $ETH_RADIOBLACK/0819 \ - script-black.eth -v 3 -V 3 - ;; -*) - echo "usage: $(basename $0) [red|secu|black]" -esac - -# vim: set ts=4 sw=4 si et: diff --git a/task.c b/task.c deleted file mode 100644 index f62ad82..0000000 --- a/task.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - File name : task.c - Projet : MERLIN - Date of creation : 2025/05/02 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : Task management - - History : - - initial version -*/ - -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include - -#include "core.h" -#include "verbose.h" - -#include "task.h" - -void *task_async_runner (void *param) -{ - sub_task_t *s = (sub_task_t *) param; - task_t *t = s->task; - - cpu_setaffinity(t->cpu_list); - - if (t->priority) { - enable_realtime (t->priority); - } - - while (!t->task (s, s->sub_task_id)) { } - - return NULL; -} - -task_t *create_async_task (const char *name, int (*task) (sub_task_t *, int), - int priority, int nb_sub_tasks, const char *cpu_list) -{ - int i; - - task_t *t = calloc (1, sizeof (*t)); - assert (t); - - t->name = strdup (name); - t->task = task; - t->priority = priority; - if (cpu_list) { - t->cpu_list = strdup(cpu_list); - for (i = 0; t->cpu_list[i] != 0; i++) { - if (t->cpu_list[i] == ':') { - t->cpu_list[i] = 0; - int nb = atoi (t->cpu_list + i + 1); - if (nb > 0) - nb_sub_tasks = nb; - } - } - } - - t->sub_task_list = calloc (nb_sub_tasks, sizeof (sub_task_t)); - assert (t->sub_task_list); - t->nb_sub_tasks = nb_sub_tasks; - - VERBOSE (coretools, INFO, PRINTF ("Creating task %s[%d] prio=%d cpu=%s\n", t->name, t->nb_sub_tasks, t->priority, t->cpu_list)); - - pthread_attr_t tattr; - int ret = 0; - - size_t size = 1024 * 1024; - - /* initialized with default attributes */ - ret |= pthread_attr_init (&tattr); - - /* setting the size of the stack also */ - ret |= pthread_attr_setstacksize (&tattr, size); - - for (i = 0; i < nb_sub_tasks; i++) { - t->sub_task_list[i].task = t; - t->sub_task_list[i].sub_task_id = i; - pthread_create (&t->sub_task_list[i].thread, &tattr, task_async_runner, &t->sub_task_list[i]); - } - - return t; -} - -void kill_all_subtasks (task_t *t, int sig) -{ - for (int i = 0; i < t->nb_sub_tasks; i++) { - pthread_cancel (t->sub_task_list[i].thread); - void *res; - pthread_join (t->sub_task_list[i].thread, &res); - if (res != PTHREAD_CANCELED) { - VERBOSE (coretools, WARNING, PRINTF ("can't cancel thread %ld\n", t->sub_task_list[i].thread)); - pthread_kill (t->sub_task_list[i].thread, sig); - } - } - free (t->sub_task_list); - free (t->cpu_list); - free (t->name); - free (t); -} - -/* vi:set tabstop=4 expandtab shiftwidth=4: this line set vi mode */ diff --git a/task.h b/task.h deleted file mode 100644 index 142b66d..0000000 --- a/task.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - File name : task.h - Projet : MERLIN - Date of creation : 2025/05/02 - Version : 1.0 - Copyright : Thales SIX - Author : Laurent Mazet - - Description : Task management - - History : - - initial version -*/ - -#ifndef __TASK_H__ -#define __TASK_H__ - -#include - -__BEGIN_DECLS - -struct _task_t; - -typedef struct { - pthread_t thread; - struct _task_t *task; - int sub_task_id; -} sub_task_t; - - -typedef struct _task_t { - char *name; - int priority; - char *cpu_list; - - int (*task) (sub_task_t *s, int subtask_id); - long long max_allowed_time; - - sub_task_t *sub_task_list; - int nb_sub_tasks; -} task_t; - -task_t *create_async_task (const char *name, int (*task) (sub_task_t *, int), - int priority, int nb_sub_tasks, const char *cpu_list); - -void kill_all_subtasks (task_t *t, int sig); - -#endif /* __TASK_H__ */ - -/* vi:set tabstop=4 expandtab shiftwidth=4: this line set vi mode */ diff --git a/test/script-bypass-si.eth b/test/script-bypass-si.eth deleted file mode 100644 index 58ae363..0000000 --- a/test/script-bypass-si.eth +++ /dev/null @@ -1,6 +0,0 @@ -# Bypass test script - -SLEEP 500 - -T:BYPASS BYPASS_CROSS_ASYNC DATA=@simulator/plaintext.txt -R:BYPASS BYPASSED_CROSS_ASYNC DATA=@simulator/plaintext.txt diff --git a/test/script-bypass.eth b/test/script-bypass.eth deleted file mode 100644 index b402fa8..0000000 --- a/test/script-bypass.eth +++ /dev/null @@ -1,7 +0,0 @@ -# Bypass test script - -T:BYPASS BYPASS_CROSS_ASYNC DATA=@test/script-bypass.eth -R:BYPASS BYPASS_CROSS_ASYNC DATA=@test/script-bypass.eth - -T:BYPASS BYPASSED_CROSS_ASYNC DATA=@test/script-bypass.eth -R:BYPASS BYPASSED_CROSS_ASYNC diff --git a/test/script-control-si.eth b/test/script-control-si.eth deleted file mode 100644 index ff54164..0000000 --- a/test/script-control-si.eth +++ /dev/null @@ -1,39 +0,0 @@ -# Provisioning test script - -SLEEP 500 - -# initializing state -#T:CONTROL STATUS_REQ -#R:CONTROL STATUS_RESP STATUS=3 - -#T:CONTROL AUTHENTICATION_REQ DATA="Wrong\ passphrase" -#R:CONTROL AUTHENTICATION_RESP DATA="Not\ authenticated" - -#T:CONTROL AUTHENTICATION_REQ DATA="Secret\ passphrase" -#R:CONTROL AUTHENTICATION_RESP DATA="Authenticated" - -# ready state -T:CONTROL STATUS_REQ -R:CONTROL STATUS_RESP STATUS=4 - -T:CONTROL REBOOT_REQ -R:CONTROL REBOOT_RESP STATUS=0 - -SLEEP 1000 - -# initializing state -#T:CONTROL STATUS_REQ -#R:CONTROL STATUS_RESP STATUS=3 - -#T:CONTROL AUTHENTICATION_REQ DATA="Secret\ passphrase" -#R:CONTROL AUTHENTICATION_RESP DATA="Authenticated" - -# ready state -T:CONTROL STATUS_REQ -R:CONTROL STATUS_RESP STATUS=4 - -T:CONTROL ZEROIZE_REQ -R:CONTROL ZEROIZE_RESP STATUS=0 - -T:CONTROL LOCK_CRYPTO_REQ -R:CONTROL LOCK_CRYPTO_RESP STATUS=0 diff --git a/test/script-control.eth b/test/script-control.eth deleted file mode 100644 index 0c3fd65..0000000 --- a/test/script-control.eth +++ /dev/null @@ -1,31 +0,0 @@ -# Provisioning test script - -T:CONTROL STATUS_REQ -R:CONTROL STATUS_REQ - -T:CONTROL STATUS_RESP STATUS=4 -R:CONTROL STATUS_RESP STATUS=4 - -T:CONTROL AUTHENTICATION_REQ DATA="This\ is\ an\ authentication\ phrase" -R:CONTROL AUTHENTICATION_REQ DATA="This\ is\ an\ authentication\ phrase" - -T:CONTROL AUTHENTICATION_RESP DATA="Authentication\ completed" -R:CONTROL AUTHENTICATION_RESP - -T:CONTROL REBOOT_REQ -R:CONTROL REBOOT_REQ - -T:CONTROL REBOOT_RESP STATUS=0 -R:CONTROL REBOOT_RESP - -T:CONTROL ZEROIZE_REQ -R:CONTROL ZEROIZE_REQ - -T:CONTROL ZEROIZE_RESP STATUS=0xFF -R:CONTROL ZEROIZE_RESP - -T:CONTROL LOCK_CRYPTO_REQ -R:CONTROL LOCK_CRYPTO_REQ - -T:CONTROL LOCK_CRYPTO_RESP STATUS=0 -R:CONTROL LOCK_CRYPTO_RESP diff --git a/test/script-cross_crypto-error.eth b/test/script-cross_crypto-error.eth deleted file mode 100644 index 81ee39d..0000000 --- a/test/script-cross_crypto-error.eth +++ /dev/null @@ -1,13 +0,0 @@ -# Cross crypto test script - -T:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@test/script-local_crypto.eth -R:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=3 BYPASS=11:22:33 - -T:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=9 BYPASSLEN=1 BYPASS=55 DATA=@test/script-local_crypto.eth -R:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC - -T:CROSS_CRYPTO DECRYPT_CROSS_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@test/script-local_crypto.eth -R:CROSS_CRYPTO DECRYPT_CROSS_ASYNC DATA=@test/script-cross_crypto.eth - -T:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@test/script-cross_crypto.eth -R:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=9 diff --git a/test/script-cross_crypto.eth b/test/script-cross_crypto.eth deleted file mode 100644 index f8c53ac..0000000 --- a/test/script-cross_crypto.eth +++ /dev/null @@ -1,13 +0,0 @@ -# Cross crypto test script - -T:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 AAD=01:02:03:04 DATA=@test/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=@test/script-local_crypto.eth -R:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC BYPASSLEN=1 BYPASS=55 DATA=@test/script-local_crypto.eth - -T:CROSS_CRYPTO DECRYPT_CROSS_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@test/script-local_crypto.eth -R:CROSS_CRYPTO DECRYPT_CROSS_ASYNC DATA=@test/script-local_crypto.eth - -T:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@test/script-cross_crypto.eth -R:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC DATA=@test/script-cross_crypto.eth CHANNELID=0 diff --git a/test/script-cross_crypto_b2r-si.eth b/test/script-cross_crypto_b2r-si.eth deleted file mode 100644 index 91e1006..0000000 --- a/test/script-cross_crypto_b2r-si.eth +++ /dev/null @@ -1,12 +0,0 @@ -# Cross crypto test script - -SLEEP 500 - -T:PROVISIONING LOAD_KEY_REQ KEYID=0 KEY=01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f:20 -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -T:CROSS_CRYPTO DECRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 IV=00:67:c6:69:98:73:51:ff:5c:4a:ec:29 DATA=42:87:77:9a:72:1f:b7:2d:eb:49:5f:ae:0f:f6:e6:5a:14:6d:18:09:cf:cc:b0:d5:28:24:87:4f:ee:35:4a:fe:cf:8b:e1:17:b0:7b:11:ab:99:8a:44:90:6c:21:2d:10:4f:03:2f:72:71:e3:81:ba:a8:6e:c7:4c:34:64:25:7e:2a:d6:d5:57:67:2d:7d:6b:69:8d:55:80:45:30:ca:49:52:ec:9a:f7:ee:fe:e6:2f:ef:6f:72:07:39:7e:08:8d:b8:ef:a4:5a:e4:0a:c5:97:04:4c:f8:b5:ea:a2:80:7f:52:ee:90:d6:33:b8:ca:ba:9c:bd:83:f3:7b:fa:64:ce:02:4c:48:2d:2e:3d:b5:8e:b0:e6:62:dd:0c:1f:e2:df:ee:33:7c:77:df:e3:35:1d:57:24:d5:8c:68:73:e8:8e:60:0c:6c:ab:15:8c:7e:1f:19:1a:81:84:94:bf:9d:0a:13:d0:c8:32:c3:0e:f7:46:44:43:81:ac:ff:87:cd:fd:1f:49:5d:ad:6a:fc:24:e8:7e:d5:a5:1d:68:ef:12:08:d4:89:0a:eb:8f:ca:6b:bd:95:7f:46:19:be:2c:63:2f:a3:61:13:34:e2:96:dd:80:45:2b:1b:20:2b:c6:d7:53:22:ed:4f:70:56:db:47:cc:28:62:6a:a3:a0:ee:91:f1:33:2f:9e:54:f2:f5:3b:3d:81:1b:af:5c:f4:72:ff:7a:cc:10:15:28:5c:ed:c6:a4:cf:d8:6a:d2:01:fd:92:49:24:c1:77:de:8f:3f:a6:05:d4:ed:2b:88:20:a1:03:44:07:39:d3:99:6d:85:ec:b4:e8:98:8c:c4:a6:bc:bd:22:6f:9d:d0:63:5e:de:74:81:52:e8:1e:0d:3f:35:dd:41:96:11:e3:72:09:3c:44:43:0b:bb:73:00:ce:f7:14:18:3e:73:cb:52:67:47:f5:4b:c3:1d:b9:47:ba:ce:ea:ed:37:84:6f:36:0f:a4:22:a3:08:3f:0c:e6:fa:7f:fb:70:71:05:32:99:25:13:56:9f:e1:18:4a:ba:f7:f0:d8:b2:5e:2d:0e:77:4f:c5:5b:80:42:b8:21:4f:bf:18:19:26:ef:83:07:8b:26:f3:00:e0:3b:0a:41:f8:3e:64:ac:d0:93:8a:32:66:d3:61:e9:d4:30:a6:eb:a4:8b:08:76:f1:db:a6:e8:03:04:95:73:0e:b4:60:95:f5:7e:05:7f:73:f5:47:7c:58:fb:e9:ef:33:44:e7:e8:c9:8e:e3:17:54:52:6c:c0:84:da:48:9a:e8:07:a8:0f:8e:52:52:47:f6:3a:dc:68:60:ef:3a:ea:a9:f7:52:69:45:7a:06:f3:19:e3:c4:96:d6:f5:18:29:a9:5b:ff:f8:af:2b:c5:89:76:31:ad:df:61:7e:44:49:e3:dd:39:7b:c5:36:5c:af:b9:45:14:01:8c:f6:a4:4f:fa:a7:06:48:7c:20:0a:08:12:61:b0:2b:26:fe:17:b1:7b:59:94:97:df:f6:35:fd:01:02:b5:c8:1e:b3:81:c9:d5:36:84:f2:b7:7c:c2:4a:1e:31:09:db:bb:3a:0a:6c:a7:a0:27:a5:1e:55:83:4f:cb:49:00:51:d6:9d:3b:db:b1:31:33:b9:fa:61:96:3f:e2:a2:8c:bc:cb:27:2f:33:20:2e:f8:f8:97:5d:cd:19:25:2d:79:3e:59:a6:d7:bc:b5:dc:ab:ef:5b:61:0c:09:98:5f:9a:86:5f:4a:7f:f0:6f:7b:d3:51:79:a2:b7:5c:62:8d:74:48:00:1b:b4:a7:40:9b:95:dd:e5:c6:e4:0d:12:34:90:b0:8f:10:43:d1:dc:30:7e:4f:29:87:90:0d:01:e3:25:e4:c9:ea:72:b5:be:2e:54:0c:52:0f:83:b9:2e:d2:71:e3:d9:ca:93:f4:5d:06:ff:fa:97:5c:45:b4:16:36:2e:d0:6a:c5:15:2f:33:76:fc:3d:d7:e6:f2:a5:79:67:5f:72:35:15:6d:96:e9:4a:eb:7c:c8:56:53:e0:91:ea:97:61:39:fc:9f:27:43:a0:99:aa:d2:97:08:27:04:b0:37:25:95:0b:d4:50:da:f4:07:9b:3d:3a:8b:6d:21:b1:68:6b:00:3e:aa:91:33:64:79:14:0d:15:73:bf:b0:bd:5a:7a:c9:c8:c9:ce:43:d5:d9:b4:c3:d8:f5:f8:e1:b0:67:3c:75:61:30:fc:61:44:e9:9f:02:48:c1:6d:21:24:cc:dd:05:31:2a:18:b6:26:76:3d:ec:c1:98:b4:37:3b:b1:f7:0e:ad:69:f4:a3:8e:40:ae:53:38:9c:56:f3:1a:ee:66:e7:ce:e7:81:3e:ed:ca:f4:e9:e4:9f:93:9c:bd:ae:43:bf:18:44:4e:bd:0e:2f:c6:63:ce:fb:67:18:50:58:9a:0c:3c:40:04:75:1d:f6 - -#R:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 DATA=@simulator/plaintext.txt -R:CROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 DATA=@simulator/plaintext.txt - diff --git a/test/script-cross_crypto_r2b-si.eth b/test/script-cross_crypto_r2b-si.eth deleted file mode 100644 index 7a2d384..0000000 --- a/test/script-cross_crypto_r2b-si.eth +++ /dev/null @@ -1,10 +0,0 @@ -# Cross crypto test script - -SLEEP 500 - -T:PROVISIONING LOAD_KEY_REQ KEYID=0 KEY=01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f:20 -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -T:CROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 DATA=@simulator/plaintext.txt - -R:CROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 IV=00:67:c6:69:98:73:51:ff:5c:4a:ec:29 DATA=42:87:77:9a:72:1f:b7:2d:eb:49:5f:ae:0f:f6:e6:5a:14:6d:18:09:cf:cc:b0:d5:28:24:87:4f:ee:35:4a:fe:cf:8b:e1:17:b0:7b:11:ab:99:8a:44:90:6c:21:2d:10:4f:03:2f:72:71:e3:81:ba:a8:6e:c7:4c:34:64:25:7e:2a:d6:d5:57:67:2d:7d:6b:69:8d:55:80:45:30:ca:49:52:ec:9a:f7:ee:fe:e6:2f:ef:6f:72:07:39:7e:08:8d:b8:ef:a4:5a:e4:0a:c5:97:04:4c:f8:b5:ea:a2:80:7f:52:ee:90:d6:33:b8:ca:ba:9c:bd:83:f3:7b:fa:64:ce:02:4c:48:2d:2e:3d:b5:8e:b0:e6:62:dd:0c:1f:e2:df:ee:33:7c:77:df:e3:35:1d:57:24:d5:8c:68:73:e8:8e:60:0c:6c:ab:15:8c:7e:1f:19:1a:81:84:94:bf:9d:0a:13:d0:c8:32:c3:0e:f7:46:44:43:81:ac:ff:87:cd:fd:1f:49:5d:ad:6a:fc:24:e8:7e:d5:a5:1d:68:ef:12:08:d4:89:0a:eb:8f:ca:6b:bd:95:7f:46:19:be:2c:63:2f:a3:61:13:34:e2:96:dd:80:45:2b:1b:20:2b:c6:d7:53:22:ed:4f:70:56:db:47:cc:28:62:6a:a3:a0:ee:91:f1:33:2f:9e:54:f2:f5:3b:3d:81:1b:af:5c:f4:72:ff:7a:cc:10:15:28:5c:ed:c6:a4:cf:d8:6a:d2:01:fd:92:49:24:c1:77:de:8f:3f:a6:05:d4:ed:2b:88:20:a1:03:44:07:39:d3:99:6d:85:ec:b4:e8:98:8c:c4:a6:bc:bd:22:6f:9d:d0:63:5e:de:74:81:52:e8:1e:0d:3f:35:dd:41:96:11:e3:72:09:3c:44:43:0b:bb:73:00:ce:f7:14:18:3e:73:cb:52:67:47:f5:4b:c3:1d:b9:47:ba:ce:ea:ed:37:84:6f:36:0f:a4:22:a3:08:3f:0c:e6:fa:7f:fb:70:71:05:32:99:25:13:56:9f:e1:18:4a:ba:f7:f0:d8:b2:5e:2d:0e:77:4f:c5:5b:80:42:b8:21:4f:bf:18:19:26:ef:83:07:8b:26:f3:00:e0:3b:0a:41:f8:3e:64:ac:d0:93:8a:32:66:d3:61:e9:d4:30:a6:eb:a4:8b:08:76:f1:db:a6:e8:03:04:95:73:0e:b4:60:95:f5:7e:05:7f:73:f5:47:7c:58:fb:e9:ef:33:44:e7:e8:c9:8e:e3:17:54:52:6c:c0:84:da:48:9a:e8:07:a8:0f:8e:52:52:47:f6:3a:dc:68:60:ef:3a:ea:a9:f7:52:69:45:7a:06:f3:19:e3:c4:96:d6:f5:18:29:a9:5b:ff:f8:af:2b:c5:89:76:31:ad:df:61:7e:44:49:e3:dd:39:7b:c5:36:5c:af:b9:45:14:01:8c:f6:a4:4f:fa:a7:06:48:7c:20:0a:08:12:61:b0:2b:26:fe:17:b1:7b:59:94:97:df:f6:35:fd:01:02:b5:c8:1e:b3:81:c9:d5:36:84:f2:b7:7c:c2:4a:1e:31:09:db:bb:3a:0a:6c:a7:a0:27:a5:1e:55:83:4f:cb:49:00:51:d6:9d:3b:db:b1:31:33:b9:fa:61:96:3f:e2:a2:8c:bc:cb:27:2f:33:20:2e:f8:f8:97:5d:cd:19:25:2d:79:3e:59:a6:d7:bc:b5:dc:ab:ef:5b:61:0c:09:98:5f:9a:86:5f:4a:7f:f0:6f:7b:d3:51:79:a2:b7:5c:62:8d:74:48:00:1b:b4:a7:40:9b:95:dd:e5:c6:e4:0d:12:34:90:b0:8f:10:43:d1:dc:30:7e:4f:29:87:90:0d:01:e3:25:e4:c9:ea:72:b5:be:2e:54:0c:52:0f:83:b9:2e:d2:71:e3:d9:ca:93:f4:5d:06:ff:fa:97:5c:45:b4:16:36:2e:d0:6a:c5:15:2f:33:76:fc:3d:d7:e6:f2:a5:79:67:5f:72:35:15:6d:96:e9:4a:eb:7c:c8:56:53:e0:91:ea:97:61:39:fc:9f:27:43:a0:99:aa:d2:97:08:27:04:b0:37:25:95:0b:d4:50:da:f4:07:9b:3d:3a:8b:6d:21:b1:68:6b:00:3e:aa:91:33:64:79:14:0d:15:73:bf:b0:bd:5a:7a:c9:c8:c9:ce:43:d5:d9:b4:c3:d8:f5:f8:e1:b0:67:3c:75:61:30:fc:61:44:e9:9f:02:48:c1:6d:21:24:cc:dd:05:31:2a:18:b6:26:76:3d:ec:c1:98:b4:37:3b:b1:f7:0e:ad:69:f4:a3:8e:40:ae:53:38:9c:56:f3:1a:ee:66:e7:ce:e7:81:3e:ed:ca:f4:e9:e4:9f:93:9c:bd:ae:43:bf:18:44:4e:bd:0e:2f:c6:63:ce:fb:67:18:50:58:9a:0c:3c:40:04:75:1d:f6 diff --git a/test/script-local_crypto-si.eth b/test/script-local_crypto-si.eth deleted file mode 100644 index 6c931d1..0000000 --- a/test/script-local_crypto-si.eth +++ /dev/null @@ -1,14 +0,0 @@ -# Local crypto test script - -SLEEP 500 - -T:PROVISIONING LOAD_KEY_REQ KEYID=0 KEY=01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f:20 -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -T:LOCAL_CRYPTO ENCRYPT_LOCAL_REQ CHANNELID=0 BYPASSLEN=0 DATA=@simulator/plaintext.txt - -R:LOCAL_CRYPTO ENCRYPTED_LOCAL_RESP CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 IV=00:67:c6:69:98:73:51:ff:5c:4a:ec:29 DATA=42:87:77:9a:72:1f:b7:2d:eb:49:5f:ae:0f:f6:e6:5a:14:6d:18:09:cf:cc:b0:d5:28:24:87:4f:ee:35:4a:fe:cf:8b:e1:17:b0:7b:11:ab:99:8a:44:90:6c:21:2d:10:4f:03:2f:72:71:e3:81:ba:a8:6e:c7:4c:34:64:25:7e:2a:d6:d5:57:67:2d:7d:6b:69:8d:55:80:45:30:ca:49:52:ec:9a:f7:ee:fe:e6:2f:ef:6f:72:07:39:7e:08:8d:b8:ef:a4:5a:e4:0a:c5:97:04:4c:f8:b5:ea:a2:80:7f:52:ee:90:d6:33:b8:ca:ba:9c:bd:83:f3:7b:fa:64:ce:02:4c:48:2d:2e:3d:b5:8e:b0:e6:62:dd:0c:1f:e2:df:ee:33:7c:77:df:e3:35:1d:57:24:d5:8c:68:73:e8:8e:60:0c:6c:ab:15:8c:7e:1f:19:1a:81:84:94:bf:9d:0a:13:d0:c8:32:c3:0e:f7:46:44:43:81:ac:ff:87:cd:fd:1f:49:5d:ad:6a:fc:24:e8:7e:d5:a5:1d:68:ef:12:08:d4:89:0a:eb:8f:ca:6b:bd:95:7f:46:19:be:2c:63:2f:a3:61:13:34:e2:96:dd:80:45:2b:1b:20:2b:c6:d7:53:22:ed:4f:70:56:db:47:cc:28:62:6a:a3:a0:ee:91:f1:33:2f:9e:54:f2:f5:3b:3d:81:1b:af:5c:f4:72:ff:7a:cc:10:15:28:5c:ed:c6:a4:cf:d8:6a:d2:01:fd:92:49:24:c1:77:de:8f:3f:a6:05:d4:ed:2b:88:20:a1:03:44:07:39:d3:99:6d:85:ec:b4:e8:98:8c:c4:a6:bc:bd:22:6f:9d:d0:63:5e:de:74:81:52:e8:1e:0d:3f:35:dd:41:96:11:e3:72:09:3c:44:43:0b:bb:73:00:ce:f7:14:18:3e:73:cb:52:67:47:f5:4b:c3:1d:b9:47:ba:ce:ea:ed:37:84:6f:36:0f:a4:22:a3:08:3f:0c:e6:fa:7f:fb:70:71:05:32:99:25:13:56:9f:e1:18:4a:ba:f7:f0:d8:b2:5e:2d:0e:77:4f:c5:5b:80:42:b8:21:4f:bf:18:19:26:ef:83:07:8b:26:f3:00:e0:3b:0a:41:f8:3e:64:ac:d0:93:8a:32:66:d3:61:e9:d4:30:a6:eb:a4:8b:08:76:f1:db:a6:e8:03:04:95:73:0e:b4:60:95:f5:7e:05:7f:73:f5:47:7c:58:fb:e9:ef:33:44:e7:e8:c9:8e:e3:17:54:52:6c:c0:84:da:48:9a:e8:07:a8:0f:8e:52:52:47:f6:3a:dc:68:60:ef:3a:ea:a9:f7:52:69:45:7a:06:f3:19:e3:c4:96:d6:f5:18:29:a9:5b:ff:f8:af:2b:c5:89:76:31:ad:df:61:7e:44:49:e3:dd:39:7b:c5:36:5c:af:b9:45:14:01:8c:f6:a4:4f:fa:a7:06:48:7c:20:0a:08:12:61:b0:2b:26:fe:17:b1:7b:59:94:97:df:f6:35:fd:01:02:b5:c8:1e:b3:81:c9:d5:36:84:f2:b7:7c:c2:4a:1e:31:09:db:bb:3a:0a:6c:a7:a0:27:a5:1e:55:83:4f:cb:49:00:51:d6:9d:3b:db:b1:31:33:b9:fa:61:96:3f:e2:a2:8c:bc:cb:27:2f:33:20:2e:f8:f8:97:5d:cd:19:25:2d:79:3e:59:a6:d7:bc:b5:dc:ab:ef:5b:61:0c:09:98:5f:9a:86:5f:4a:7f:f0:6f:7b:d3:51:79:a2:b7:5c:62:8d:74:48:00:1b:b4:a7:40:9b:95:dd:e5:c6:e4:0d:12:34:90:b0:8f:10:43:d1:dc:30:7e:4f:29:87:90:0d:01:e3:25:e4:c9:ea:72:b5:be:2e:54:0c:52:0f:83:b9:2e:d2:71:e3:d9:ca:93:f4:5d:06:ff:fa:97:5c:45:b4:16:36:2e:d0:6a:c5:15:2f:33:76:fc:3d:d7:e6:f2:a5:79:67:5f:72:35:15:6d:96:e9:4a:eb:7c:c8:56:53:e0:91:ea:97:61:39:fc:9f:27:43:a0:99:aa:d2:97:08:27:04:b0:37:25:95:0b:d4:50:da:f4:07:9b:3d:3a:8b:6d:21:b1:68:6b:00:3e:aa:91:33:64:79:14:0d:15:73:bf:b0:bd:5a:7a:c9:c8:c9:ce:43:d5:d9:b4:c3:d8:f5:f8:e1:b0:67:3c:75:61:30:fc:61:44:e9:9f:02:48:c1:6d:21:24:cc:dd:05:31:2a:18:b6:26:76:3d:ec:c1:98:b4:37:3b:b1:f7:0e:ad:69:f4:a3:8e:40:ae:53:38:9c:56:f3:1a:ee:66:e7:ce:e7:81:3e:ed:ca:f4:e9:e4:9f:93:9c:bd:ae:43:bf:18:44:4e:bd:0e:2f:c6:63:ce:fb:67:18:50:58:9a:0c:3c:40:04:75:1d:f6 - -T:LOCAL_CRYPTO DECRYPT_LOCAL_REQ CHANNELID=0 BYPASSLEN=0 AAD=00:00:00:00 IV=00:67:c6:69:98:73:51:ff:5c:4a:ec:29 DATA=42:87:77:9a:72:1f:b7:2d:eb:49:5f:ae:0f:f6:e6:5a:14:6d:18:09:cf:cc:b0:d5:28:24:87:4f:ee:35:4a:fe:cf:8b:e1:17:b0:7b:11:ab:99:8a:44:90:6c:21:2d:10:4f:03:2f:72:71:e3:81:ba:a8:6e:c7:4c:34:64:25:7e:2a:d6:d5:57:67:2d:7d:6b:69:8d:55:80:45:30:ca:49:52:ec:9a:f7:ee:fe:e6:2f:ef:6f:72:07:39:7e:08:8d:b8:ef:a4:5a:e4:0a:c5:97:04:4c:f8:b5:ea:a2:80:7f:52:ee:90:d6:33:b8:ca:ba:9c:bd:83:f3:7b:fa:64:ce:02:4c:48:2d:2e:3d:b5:8e:b0:e6:62:dd:0c:1f:e2:df:ee:33:7c:77:df:e3:35:1d:57:24:d5:8c:68:73:e8:8e:60:0c:6c:ab:15:8c:7e:1f:19:1a:81:84:94:bf:9d:0a:13:d0:c8:32:c3:0e:f7:46:44:43:81:ac:ff:87:cd:fd:1f:49:5d:ad:6a:fc:24:e8:7e:d5:a5:1d:68:ef:12:08:d4:89:0a:eb:8f:ca:6b:bd:95:7f:46:19:be:2c:63:2f:a3:61:13:34:e2:96:dd:80:45:2b:1b:20:2b:c6:d7:53:22:ed:4f:70:56:db:47:cc:28:62:6a:a3:a0:ee:91:f1:33:2f:9e:54:f2:f5:3b:3d:81:1b:af:5c:f4:72:ff:7a:cc:10:15:28:5c:ed:c6:a4:cf:d8:6a:d2:01:fd:92:49:24:c1:77:de:8f:3f:a6:05:d4:ed:2b:88:20:a1:03:44:07:39:d3:99:6d:85:ec:b4:e8:98:8c:c4:a6:bc:bd:22:6f:9d:d0:63:5e:de:74:81:52:e8:1e:0d:3f:35:dd:41:96:11:e3:72:09:3c:44:43:0b:bb:73:00:ce:f7:14:18:3e:73:cb:52:67:47:f5:4b:c3:1d:b9:47:ba:ce:ea:ed:37:84:6f:36:0f:a4:22:a3:08:3f:0c:e6:fa:7f:fb:70:71:05:32:99:25:13:56:9f:e1:18:4a:ba:f7:f0:d8:b2:5e:2d:0e:77:4f:c5:5b:80:42:b8:21:4f:bf:18:19:26:ef:83:07:8b:26:f3:00:e0:3b:0a:41:f8:3e:64:ac:d0:93:8a:32:66:d3:61:e9:d4:30:a6:eb:a4:8b:08:76:f1:db:a6:e8:03:04:95:73:0e:b4:60:95:f5:7e:05:7f:73:f5:47:7c:58:fb:e9:ef:33:44:e7:e8:c9:8e:e3:17:54:52:6c:c0:84:da:48:9a:e8:07:a8:0f:8e:52:52:47:f6:3a:dc:68:60:ef:3a:ea:a9:f7:52:69:45:7a:06:f3:19:e3:c4:96:d6:f5:18:29:a9:5b:ff:f8:af:2b:c5:89:76:31:ad:df:61:7e:44:49:e3:dd:39:7b:c5:36:5c:af:b9:45:14:01:8c:f6:a4:4f:fa:a7:06:48:7c:20:0a:08:12:61:b0:2b:26:fe:17:b1:7b:59:94:97:df:f6:35:fd:01:02:b5:c8:1e:b3:81:c9:d5:36:84:f2:b7:7c:c2:4a:1e:31:09:db:bb:3a:0a:6c:a7:a0:27:a5:1e:55:83:4f:cb:49:00:51:d6:9d:3b:db:b1:31:33:b9:fa:61:96:3f:e2:a2:8c:bc:cb:27:2f:33:20:2e:f8:f8:97:5d:cd:19:25:2d:79:3e:59:a6:d7:bc:b5:dc:ab:ef:5b:61:0c:09:98:5f:9a:86:5f:4a:7f:f0:6f:7b:d3:51:79:a2:b7:5c:62:8d:74:48:00:1b:b4:a7:40:9b:95:dd:e5:c6:e4:0d:12:34:90:b0:8f:10:43:d1:dc:30:7e:4f:29:87:90:0d:01:e3:25:e4:c9:ea:72:b5:be:2e:54:0c:52:0f:83:b9:2e:d2:71:e3:d9:ca:93:f4:5d:06:ff:fa:97:5c:45:b4:16:36:2e:d0:6a:c5:15:2f:33:76:fc:3d:d7:e6:f2:a5:79:67:5f:72:35:15:6d:96:e9:4a:eb:7c:c8:56:53:e0:91:ea:97:61:39:fc:9f:27:43:a0:99:aa:d2:97:08:27:04:b0:37:25:95:0b:d4:50:da:f4:07:9b:3d:3a:8b:6d:21:b1:68:6b:00:3e:aa:91:33:64:79:14:0d:15:73:bf:b0:bd:5a:7a:c9:c8:c9:ce:43:d5:d9:b4:c3:d8:f5:f8:e1:b0:67:3c:75:61:30:fc:61:44:e9:9f:02:48:c1:6d:21:24:cc:dd:05:31:2a:18:b6:26:76:3d:ec:c1:98:b4:37:3b:b1:f7:0e:ad:69:f4:a3:8e:40:ae:53:38:9c:56:f3:1a:ee:66:e7:ce:e7:81:3e:ed:ca:f4:e9:e4:9f:93:9c:bd:ae:43:bf:18:44:4e:bd:0e:2f:c6:63:ce:fb:67:18:50:58:9a:0c:3c:40:04:75:1d:f6 - -R:LOCAL_CRYPTO DECRYPTED_LOCAL_RESP CHANNELID=0 BYPASSLEN=0 DATA=@simulator/plaintext.txt diff --git a/test/script-local_crypto.eth b/test/script-local_crypto.eth deleted file mode 100644 index 1d0792a..0000000 --- a/test/script-local_crypto.eth +++ /dev/null @@ -1,13 +0,0 @@ -# Local crypto test script - -T:LOCAL_CRYPTO ENCRYPT_LOCAL_REQ CHANNELID=2 BYPASSLEN=3 BYPASS=11:22:33 DATA=@test/script-cross_crypto.eth -R:LOCAL_CRYPTO ENCRYPT_LOCAL_REQ - -T:LOCAL_CRYPTO ENCRYPTED_LOCAL_RESP CHANNELID=9 BYPASSLEN=0 DATA=@test/script-local_crypto.eth -R:LOCAL_CRYPTO ENCRYPTED_LOCAL_RESP - -T:LOCAL_CRYPTO DECRYPT_LOCAL_REQ CHANNELID=5 BYPASSLEN=0 DATA=@test/script-local_crypto.eth -R:LOCAL_CRYPTO DECRYPT_LOCAL_REQ - -T:LOCAL_CRYPTO DECRYPTED_LOCAL_RESP CHANNELID=0 BYPASSLEN=3 BYPASS=22:33:44 DATA=@test/script-cross_crypto.eth -R:LOCAL_CRYPTO DECRYPTED_LOCAL_RESP diff --git a/test/script-prng-si.eth b/test/script-prng-si.eth deleted file mode 100644 index 438793f..0000000 --- a/test/script-prng-si.eth +++ /dev/null @@ -1,9 +0,0 @@ -# PRNG test script - -SLEEP 500 - -T:PRNG RANDOM_REQ PRNGID=0 SEQLEN=8 SEED=01:02:03:04 -R:PRNG RANDOM_RESP - -T:PRNG RANDOM_REQ PRNGID=0 SEQLEN=8 SEED=01:02 -R:PRNG RANDOM_RESP diff --git a/test/script-prng.eth b/test/script-prng.eth deleted file mode 100644 index ac1350c..0000000 --- a/test/script-prng.eth +++ /dev/null @@ -1,7 +0,0 @@ -# PRNG test script - -T:PRNG RANDOM_REQ PRNGID=0 SEQLEN=64 SEED=01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10 -R:PRNG RANDOM_REQ PRNGID=0 SEQLEN=64 SEED=01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10 - -T:PRNG RANDOM_RESP DATA=@test/script-prng.eth -R:PRNG RANDOM_RESP diff --git a/test/script-provisioning-si.eth b/test/script-provisioning-si.eth deleted file mode 100644 index 4a0abfa..0000000 --- a/test/script-provisioning-si.eth +++ /dev/null @@ -1,36 +0,0 @@ -# Provisioning test script - -SLEEP 500 - -T:PROVISIONING LOAD_KEY_REQ KEYID=0 KEY=01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10 -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -T:PROVISIONING LOAD_KEY_REQ KEYID=1 KEY=11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f:10 -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -T:PROVISIONING UNLOAD_KEY_REQ KEYID=2 -R:PROVISIONING UNLOAD_KEY_RESP STATUS=255 - -T:PROVISIONING LOAD_KEY_REQ KEYID=2 KEY=21:22:23:24:25:26:27:28:29:2a:2b:2c:2d:2e:2f:10 -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -T:PROVISIONING UNLOAD_KEY_REQ KEYID=2 -R:PROVISIONING UNLOAD_KEY_RESP STATUS=0 - -T:PROVISIONING ERASE_KEY_REQ KEYID=255 -R:PROVISIONING ERASE_KEY_RESP STATUS=0 - -T:PROVISIONING LOAD_KEY_REQ KEYID=1 KEY=11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f:10 -R:PROVISIONING LOAD_KEY_RESP STATUS=0 - -T:PROVISIONING UNLOAD_KEY_REQ KEYID=0 -R:PROVISIONING UNLOAD_KEY_RESP STATUS=255 - -T:PROVISIONING ASSOCIATE_CHANNEL_REQ CHANNELID=0 KEYID=1 -R:PROVISIONING ASSOCIATE_CHANNEL_RESP STATUS=0 - -T:PROVISIONING DISSOCIATE_CHANNEL_REQ CHANNELID=0 KEYID=255 -R:PROVISIONING DISSOCIATE_CHANNEL_RESP STATUS=0 - -T:PROVISIONING DISSOCIATE_CHANNEL_REQ CHANNELID=0 KEYID=255 -R:PROVISIONING DISSOCIATE_CHANNEL_RESP STATUS=255 diff --git a/test/script-provisioning.eth b/test/script-provisioning.eth deleted file mode 100644 index 848d04a..0000000 --- a/test/script-provisioning.eth +++ /dev/null @@ -1,31 +0,0 @@ -# Provisioning test script - -T:PROVISIONING LOAD_KEY_REQ KEYID=2 KEY=01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10 -R:PROVISIONING LOAD_KEY_REQ KEYID=2 KEY=01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10 - -T:PROVISIONING LOAD_KEY_RESP STATUS=0 -R:PROVISIONING LOAD_KEY_RESP - -T:PROVISIONING UNLOAD_KEY_REQ KEYID=42 -R:PROVISIONING UNLOAD_KEY_REQ - -T:PROVISIONING UNLOAD_KEY_RESP STATUS=0xFF -R:PROVISIONING UNLOAD_KEY_RESP - -T:PROVISIONING ERASE_KEY_REQ KEYID=255 -R:PROVISIONING ERASE_KEY_REQ - -T:PROVISIONING ERASE_KEY_RESP STATUS=0 -R:PROVISIONING ERASE_KEY_RESP - -T:PROVISIONING ASSOCIATE_CHANNEL_REQ CHANNELID=0 KEYID=2 -R:PROVISIONING ASSOCIATE_CHANNEL_REQ CHANNELID=0 KEYID=2 - -T:PROVISIONING ASSOCIATE_CHANNEL_RESP STATUS=0 -R:PROVISIONING ASSOCIATE_CHANNEL_RESP - -T:PROVISIONING DISSOCIATE_CHANNEL_REQ CHANNELID=0 KEYID=255 -R:PROVISIONING DISSOCIATE_CHANNEL_REQ - -T:PROVISIONING DISSOCIATE_CHANNEL_RESP STATUS=0 -R:PROVISIONING DISSOCIATE_CHANNEL_RESP