Skip to content

Commit d397d02

Browse files
jaromilmatteo-cristino
authored andcommitted
feat: use context arg to sideload lua with keyword
context comes handy for debugging and testing to pass lua sideload without changing the external api, now parses first line about its function and then executes. In future will close this functionality on RELEASE builds.
1 parent 3ff4b75 commit d397d02

7 files changed

Lines changed: 57 additions & 17 deletions

File tree

src/zenroom.c

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,19 +507,42 @@ int _check_zenroom_result(zenroom_t *zz) {
507507
return(exitcode);
508508
}
509509

510+
static void _resolve_context_mode(const char *context, const char **runtime_context, const char **sideload_lua) {
511+
if (context) {
512+
const char *nl = strchr(context, '\n');
513+
if (nl) {
514+
size_t first_line_len = (size_t)(nl - context);
515+
if ((first_line_len == 3 && strncmp(context, "lua", 3) == 0) ||
516+
(first_line_len == 4 && strncmp(context, "lua\r", 4) == 0)) {
517+
*runtime_context = NULL;
518+
*sideload_lua = nl + 1;
519+
return;
520+
}
521+
}
522+
}
523+
*runtime_context = context;
524+
*sideload_lua = NULL;
525+
}
526+
510527
int zencode_exec(const char *script, const char *conf, const char *keys, const char *data,
511528
const char *extra, const char *context) {
512529

513-
const char *c, *k, *d, *e, *x;
530+
const char *c, *k, *d, *e, *x, *side;
514531
c = conf ? (conf[0] == '\0') ? NULL : conf : NULL;
515532
k = keys ? (keys[0] == '\0') ? NULL : keys : NULL;
516533
d = data ? (data[0] == '\0') ? NULL : data : NULL;
517534
e = extra ? (extra[0] == '\0') ? NULL : extra : NULL;
518535
x = context ? (context[0] == '\0') ? NULL : context : NULL;
536+
_resolve_context_mode(x, &x, &side);
519537

520538
zenroom_t *Z = zen_init_extra(c, k, d, e, x);
521539
if (_check_zenroom_init(Z) != SUCCESS) return ERR_INIT;
522540
if (_check_script_arg(Z, script) != SUCCESS) return ERR_INIT;
541+
if (side) {
542+
if (_check_script_arg(Z, side) != SUCCESS) return ERR_INIT;
543+
zen_exec_lua(Z, side);
544+
if (Z->exitcode != SUCCESS) return _check_zenroom_result(Z);
545+
}
523546

524547
zen_exec_zencode(Z, script);
525548
return( _check_zenroom_result(Z) );
@@ -548,12 +571,13 @@ int zencode_exec_tobuf(const char *script, const char *conf, const char *keys, c
548571
char *stdout_buf, size_t stdout_len,
549572
char *stderr_buf, size_t stderr_len) {
550573

551-
const char *c, *k, *d, *e, *x;
574+
const char *c, *k, *d, *e, *x, *side;
552575
c = conf ? (conf[0] == '\0') ? NULL : conf : NULL;
553576
k = keys ? (keys[0] == '\0') ? NULL : keys : NULL;
554577
d = data ? (data[0] == '\0') ? NULL : data : NULL;
555578
e = extra ? (extra[0] == '\0') ? NULL : extra : NULL;
556579
x = context ? (context[0] == '\0') ? NULL : context : NULL;
580+
_resolve_context_mode(x, &x, &side);
557581

558582
zenroom_t *Z = zen_init_extra(c, k, d, e, x);
559583
if (_check_zenroom_init(Z) != SUCCESS) return ERR_INIT;
@@ -564,6 +588,11 @@ int zencode_exec_tobuf(const char *script, const char *conf, const char *keys, c
564588
Z->stdout_len = stdout_len;
565589
Z->stderr_buf = stderr_buf;
566590
Z->stderr_len = stderr_len;
591+
if (side) {
592+
if (_check_script_arg(Z, side) != SUCCESS) return ERR_INIT;
593+
zen_exec_lua(Z, side);
594+
if (Z->exitcode != SUCCESS) return _check_zenroom_result(Z);
595+
}
567596
zen_exec_zencode(Z, script);
568597
return( _check_zenroom_result(Z));
569598
}

test/lua/crypto.bats

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ load ../bats_setup
3939
Z zcash.lua
4040
Z hkdf.lua
4141
Z fsp.lua
42+
Z ulid_time.lua
4243
Z uuid.lua
4344
Z guard_precedence.lua
4445
Z time_big_regression.lua

test/zencode/longfellow.bats

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ EOF
2121
"document": "o2d2ZXJzaW9uYzEuMGlkb2N1bWVudHOBo2dkb2NUeXBldW9yZy5pc28uMTgwMTMuNS4xLm1ETGxpc3N1ZXJTaWduZWSiam5hbWVTcGFjZXOhcW9yZy5pc28uMTgwMTMuNS4xhdgYWFqkaGRpZ2VzdElEGBpmcmFuZG9tUHLHryZJ0Fo4sC5+HMf50EZxZWxlbWVudElkZW50aWZpZXJrZmFtaWx5X25hbWVsZWxlbWVudFZhbHVlak11c3Rlcm1hbm7YGFhbpGhkaWdlc3RJRApmcmFuZG9tUPyKj1uvtAyzIXdtv1++GIFxZWxlbWVudElkZW50aWZpZXJqYmlydGhfZGF0ZWxlbGVtZW50VmFsdWXZA+xqMTk3MS0wOS0wMdgYWFukaGRpZ2VzdElEFGZyYW5kb21QWc3dkddT7Zj/VV0vlydFO3FlbGVtZW50SWRlbnRpZmllcmppc3N1ZV9kYXRlbGVsZW1lbnRWYWx1ZdkD7GoyMDI0LTAzLTE12BhYS6RoZGlnZXN0SUQPZnJhbmRvbVDM3FmMqa/ulf1XaD6xmv8zcWVsZW1lbnRJZGVudGlmaWVyZmhlaWdodGxlbGVtZW50VmFsdWUYr9gYWE+kaGRpZ2VzdElEFWZyYW5kb21QrFD2UbwE8AHQIWOEfJ8cyXFlbGVtZW50SWRlbnRpZmllcmthZ2Vfb3Zlcl8xOGxlbGVtZW50VmFsdWX1amlzc3VlckF1dGiEQ6EBJqEYIVkCgzCCAn8wggIloAMCAQICEDUAupvv2Ry52nkF/+8YvoowCgYIKoZIzj0EAwIwOTELMAkGA1UEBhMCVVQxKjAoBgNVBAMMIU9XRiBJZGVudGl0eSBDcmVkZW50aWFsIFRFU1QgSUFDQTAeFw0yNDA5MDIxNzIxMTNaFw0yNTA5MDIxNzIxMTNaMDcxKDAmBgNVBAMMH09XRiBJZGVudGl0eSBDcmVkZW50aWFsIFRFU1QgRFMxCzAJBgNVBAYTAlVUMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3BwfVc/0zVx2z0FpJ49yF2Z/hu6B2GabY/Lhm8EqDJ8SNV3QOF/tO8M77cl4G5qtR7M+TCRwS40UKIsbPLRcKKOCAQ8wggELMB0GA1UdDgQWBBQTCc6GC53/vIWZKDod2cHzVWpj8TAfBgNVHSMEGDAW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"
2222
}
2323
EOF
24-
2524
cat <<EOF | $ZENROOM_EXECUTABLE -z -a longfellow_circuit_1.json -k age_over_18.json > $BATS_FILE_TMPDIR/proof.json
2625
Scenario longfellow
2726
Given I have a 'circuit'

test/zencode/rules.bats

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,6 @@ EOF
308308
assert_output '{"string_dict_with_number":{"bool":true,"num":1978468946,"string":"hello"}}'
309309
}
310310

311-
312311
# --- Rule path separator --- #
313312
@test "Rule path separator" {
314313
cat << EOF | save_asset rule_path_separator.data

test/zencode_exec.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import fs from "fs";
22
import { pathToFileURL } from "url";
33

44
// Read CLI arguments
5-
const [, , wasmPath, scriptFile, confString, keysFile, dataFile] = process.argv;
5+
const [, , wasmPath, scriptFile, confString, keysFile, dataFile, sideloadFile] =
6+
process.argv;
67

78
// Dynamically import the Emscripten-generated module (with `-sEXPORT_ES6=1 -sMODULARIZE=1`)
89
const C = (await import(pathToFileURL(wasmPath).href)).default();
910

10-
const zencodeExec = (script, conf = null, keys = null, data = null) => {
11+
const zencodeExec = (script, conf = null, keys = null, data = null, context = null) => {
1112
C.then((Module) => {
1213
Module.exec_ok = () => 0;
1314
Module.exec_error = () => 0;
@@ -16,8 +17,8 @@ const zencodeExec = (script, conf = null, keys = null, data = null) => {
1617
Module.ccall(
1718
"zencode_exec",
1819
"number",
19-
["string", "string", "string", "string", "number"],
20-
[script, conf, keys, data],
20+
["string", "string", "string", "string", "string", "string"],
21+
[script, conf, keys, data, null, context],
2122
);
2223
});
2324
};
@@ -27,13 +28,16 @@ const zencode = (
2728
conf_string = null,
2829
keys_file = null,
2930
data_file = null,
31+
sideload_file = null,
3032
) => {
3133
const enc = { encoding: "utf8" };
3234
const script = fs.readFileSync(script_file, enc);
3335
const conf = conf_string;
3436
const keys = keys_file ? fs.readFileSync(keys_file, enc) : null;
3537
const data = data_file ? fs.readFileSync(data_file, enc) : null;
36-
return zencodeExec(script, conf, keys, data);
38+
const sideload = sideload_file ? fs.readFileSync(sideload_file, enc) : null;
39+
const context = sideload ? `lua\n${sideload}` : null;
40+
return zencodeExec(script, conf, keys, data, context);
3741
};
3842

39-
zencode(scriptFile, confString, keysFile, dataFile);
43+
zencode(scriptFile, confString, keysFile, dataFile, sideloadFile);

test/zenroom_exec.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import fs from "fs";
22
import { pathToFileURL } from "url";
33

44
// Read CLI arguments
5-
const [, , wasmPath, scriptFile, confString, keysFile, dataFile] = process.argv;
5+
const [, , wasmPath, scriptFile, confString, keysFile, dataFile, sideloadFile] =
6+
process.argv;
67

78
// Dynamically import the Emscripten-generated module (built with `-sMODULARIZE=1 -sEXPORT_ES6=1`)
89
const C = (await import(pathToFileURL(wasmPath).href)).default();
@@ -27,24 +28,30 @@ const zenroom = (
2728
conf_string = null,
2829
keys_file = null,
2930
data_file = null,
31+
sideload_file = null,
3032
) => {
3133
const enc = { encoding: "utf8" };
32-
const script = fs.readFileSync(script_file, enc);
34+
let script = fs.readFileSync(script_file, enc);
35+
if (sideload_file) {
36+
const sideload = fs.readFileSync(sideload_file, enc);
37+
script = `${sideload}\n${script}`;
38+
}
3339
const conf = conf_string;
3440
const keys = keys_file ? fs.readFileSync(keys_file, enc) : null;
3541
const data = data_file ? fs.readFileSync(data_file, enc) : null;
3642
return zenroomExec(script, conf, keys, data);
3743
};
3844

3945
console.log(
40-
"[JS] zenroom %s %s %s %s",
46+
"[JS] zenroom %s %s %s %s %s",
4147
scriptFile,
4248
confString,
4349
keysFile,
4450
dataFile,
51+
sideloadFile,
4552
);
4653

4754
console.time(scriptFile);
48-
zenroom(scriptFile, confString, keysFile, dataFile);
55+
zenroom(scriptFile, confString, keysFile, dataFile, sideloadFile);
4956
console.timeEnd(scriptFile);
5057
console.log("@", "=".repeat(40), "@\n");

test/zexe_js_wrapper.sh

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,23 @@
55

66
conf=${conf:-"logfmt=text,debug=0"}
77

8-
while getopts "zc:k:a:" arg; do
8+
while getopts "zc:k:a:l:" arg; do
99
case $arg in
1010
z) ;; # autodetected from script name
1111
k) keys="${OPTARG}" ;;
1212
a) data="${OPTARG}" ;;
13+
l) sideload="${OPTARG}" ;;
1314
c) conf="${OPTARG},logfmt=text,debug=0" ;;
1415
esac
1516
done
1617
shift $((OPTIND-1))
1718

1819
if [[ $1 == *.lua ]]; then
1920
node =ROOT=/test/zenroom_exec.js \
20-
=ROOT=/bindings/javascript/dist/main/zenroom.js $1 $conf $keys $data
21+
=ROOT=/bindings/javascript/dist/main/zenroom.js "$1" "$conf" "$keys" "$data" "$sideload"
2122
elif [[ $1 == *.zen ]]; then
2223
node =ROOT=/test/zencode_exec.js \
23-
=ROOT=/bindings/javascript/dist/main/zenroom.js $1 $conf $keys $data
24+
=ROOT=/bindings/javascript/dist/main/zenroom.js "$1" "$conf" "$keys" "$data" "$sideload"
2425
else
2526
echo "Unsupported script: $1"
2627
fi

0 commit comments

Comments
 (0)