From 119ada9e872c4932dc89a4309ccec832edcb5888 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Thu, 10 Apr 2025 00:57:54 +0200 Subject: [PATCH] first try --- morep_simulator.c | 38 ++++++++++++++++++++++++++++++----- parse.c | 44 +++++++++++++++++++++-------------------- parse.h | 6 +++--- script-cross_crypto.eth | 13 ++++++++++++ script-local_crypto.eth | 13 ++++++++++++ 5 files changed, 85 insertions(+), 29 deletions(-) create mode 100644 script-cross_crypto.eth create mode 100644 script-local_crypto.eth diff --git a/morep_simulator.c b/morep_simulator.c index 0528f49..a538c18 100644 --- a/morep_simulator.c +++ b/morep_simulator.c @@ -216,6 +216,8 @@ 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; @@ -255,6 +257,14 @@ int main (int argc, char **argv) url = arg; mode = 0; break; + case 's': + arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; + if (arg == NULL) { + VERBOSE (morep, 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) { @@ -274,7 +284,7 @@ int main (int argc, char **argv) break; case 'h': default: - printf ("usage: %s [-h] [-l log] [-r url] [-t url] [-v level] [file]\n", progname); + printf ("usage: %s [-h] [-l log] [-r url] [-s serv] [-t url] [-v level] [file]\n", progname); return (c != 'h'); } @@ -286,6 +296,13 @@ int main (int argc, char **argv) (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 (strcmp (s->name, servname) == 0) { + memcpy (mode ? &(s->rx) : &(s->tx), comm_list + nbcomms, sizeof (comm_t)); + break; + } + } nbcomms++; } else { VERBOSE (morep, ERROR, PRINTF ("can't connect on url '%s'\n", url)); @@ -373,6 +390,11 @@ int main (int argc, char **argv) } 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 */ @@ -409,7 +431,7 @@ int main (int argc, char **argv) VERBOSE (morep, DEBUG, PRINTF ("work with %c[%s]\n", comm->mode ? 'T' : 'R', serv->name)); /* skip space */ - char *tmp = line + offset; + tmp = line + offset; TEST_CHARS (tmp, " \t", 0); offset = tmp - line; @@ -619,10 +641,16 @@ int main (int argc, char **argv) } /* test: morep_simulator.exe -h | grep usage */ +/* test: morep_simulator.exe -l 2>&1 | grep 'log file not specified' */ /* test: morep_simulator.exe -r 2>&1 | grep 'url not specified' */ +/* test: morep_simulator.exe -s 2>&1 | grep 'service not specified' */ /* test: morep_simulator.exe -t 2>&1 | grep 'url not specified' */ -/* test: morep_simulator.exe -l 2>&1 | grep 'log file not specified' */ -/* test: morep_simulator.exe -l - -t lo://00:00:00:00:00:00/0808 -v 4 script-lo.eth */ -/* test: morep_simulator.exe -l script.log -t lo://00:00:00:00:00:00/0808 -r lo://00:00:00:00:00:00/0808 script-lo.eth */ +/* test: morep_simulator.exe -l - -t lo://00:00:00:00:00:00/0809 -v 4 script-l0.eth */ +/* test: morep_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 script-cross_crypto.eth */ +/* test: morep_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 script-local_crypto.eth */ +/* test: morep_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 script-provisioning.eth */ +/* test: morep_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 script-prng.eth */ +/* test: morep_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 script-bypass.eth */ +/* test: morep_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 script-control.eth */ /* vim: set ts=4 sw=4 si et: */ diff --git a/parse.c b/parse.c index 72bea91..a8f8876 100644 --- a/parse.c +++ b/parse.c @@ -47,6 +47,7 @@ int parse_array (char *str, uint8_t *buffer, int maxlen) /* string payload: "..." (space must be protected by '\') */ if ((*str == '"') && (slen > 1)) { + if (maxlen < slen - 2) slen = maxlen + 2; if (str[slen - 1] == '"') { len = slen - 2; if (len > maxlen) { @@ -79,31 +80,32 @@ int parse_array (char *str, uint8_t *buffer, int maxlen) } /* hexa payload: xxxxxx [0-9a-fA-F] */ - else if (slen % 2 == 0) { - len = slen / 2; - if (len > maxlen) { - VERBOSE (morep, WARNING, PRINTF ("string too large (%d > %d) for '%s'\n", len, maxlen, str)); - len = maxlen; - } - int i; - for (i = 0; i < len; i++) { - char digit[3] = {0}; - char *ptr = NULL; - digit[0] = str[2 * i]; - digit[1] = str[2 * i + 1]; - buffer[i] = strtol (digit, &ptr, 16); - if (*ptr != '\0') { - VERBOSE (morep, ERROR, PRINTF ("unrecognize hexa-string (%d) '%s'\n", 2 * i, str)); - break; + else { + if (maxlen * 2 < slen) slen = maxlen * 2; + if (slen % 2 == 0) { + len = slen / 2; + if (len > maxlen) { + VERBOSE (morep, WARNING, PRINTF ("string too large (%d > %d) for '%s'\n", len, maxlen, str)); + len = maxlen; + } + for (int i = 0; i < len; i++) { + char digit[3] = {0}; + char *ptr = NULL; + digit[0] = str[3 * i]; + digit[1] = str[3 * i + 1]; + buffer[i] = strtol (digit, &ptr, 16); + if ((*ptr != '\0') && (*ptr != ' ') && (*ptr != '\t')) { + VERBOSE (morep, ERROR, PRINTF ("unrecognize hexa-string (%d) '%s'|%s\n", 2 * i, str, ptr)); + break; + } } } - } - /* unrecognize format */ - else { - VERBOSE (morep, WARNING, PRINTF ("can't parse buffer '%s'\n", str)); + /* unrecognize format */ + else { + VERBOSE (morep, WARNING, PRINTF ("can't parse buffer '%s'\n", str)); + } } - return len; } diff --git a/parse.h b/parse.h index 1145fb1..3c95140 100644 --- a/parse.h +++ b/parse.h @@ -116,9 +116,9 @@ __BEGIN_DECLS @param name field name @param buf preallocated storage */ -#define PARSE_ARRAY(name, buf) \ - else if (strcmp (var, name) == 0) { \ - buf##_len = parse_array (val, buf, sizeof (buf)); \ +#define PARSE_ARRAY(name, buf) \ + else if (strcmp (var, name) == 0) { \ + buf##_len = parse_array (val, buf, (buf##_len) ? buf##_len : (int)sizeof (buf)); \ } /** diff --git a/script-cross_crypto.eth b/script-cross_crypto.eth new file mode 100644 index 0000000..f2fa7ba --- /dev/null +++ b/script-cross_crypto.eth @@ -0,0 +1,13 @@ +# Test script + +TCROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth +RCROSS_CRYPTO ENCRYPT_CROSS_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth + +TCROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=9 BYPASSLEN=0 DATA=@script-local_crypto.eth +RCROSS_CRYPTO ENCRYPTED_CROSS_ASYNC CHANNELID=9 BYPASSLEN=0 DATA=@script-local_crypto.eth + +TCROSS_CRYPTO DECRYPT_CROSS_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@script-local_crypto.eth +RCROSS_CRYPTO DECRYPT_CROSS_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@script-local_crypto.eth + +TCROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth +RCROSS_CRYPTO DECRYPTED_CROSS_ASYNC CHANNELID=0 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth diff --git a/script-local_crypto.eth b/script-local_crypto.eth new file mode 100644 index 0000000..e9e4312 --- /dev/null +++ b/script-local_crypto.eth @@ -0,0 +1,13 @@ +# Test script + +T:LOCAL_CRYPTO ENCRYPT_LOCAL_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth +R:LOCAL_CRYPTO ENCRYPT_LOCAL_ASYNC CHANNELID=2 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth + +T:LOCAL_CRYPTO ENCRYPTED_LOCAL_ASYNC CHANNELID=9 BYPASSLEN=0 DATA=@script-local_crypto.eth +R:LOCAL_CRYPTO ENCRYPTED_LOCAL_ASYNC CHANNELID=9 BYPASSLEN=0 DATA=@script-local_crypto.eth + +T:LOCAL_CRYPTO DECRYPT_LOCAL_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@script-local_crypto.eth +R:LOCAL_CRYPTO DECRYPT_LOCAL_ASYNC CHANNELID=5 BYPASSLEN=0 DATA=@script-local_crypto.eth + +T:LOCAL_CRYPTO DECRYPTED_LOCAL_ASYNC CHANNELID=0 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth +R:LOCAL_CRYPTO DECRYPTED_LOCAL_ASYNC CHANNELID=0 BYPASSLEN=4 BYPASS=11:22:33:44 DATA=@script-cross_crypto.eth -- 2.30.2