Add emscripten to tests pipeline

This commit is contained in:
mup 2024-04-29 09:24:21 +02:00 committed by Wren
parent 4dd743dfa0
commit 2734a794e0
10 changed files with 102 additions and 391 deletions

View file

@ -23,13 +23,16 @@ jobs:
repository-projects: none
security-events: none
statuses: none
env:
emscripten_version: 3.1.59
strategy:
matrix:
node-version: [ 20.11.1 ]
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1
with:
submodules: 'true'
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 #v4.0.2
with:
@ -49,6 +52,27 @@ jobs:
- name: lint, formatting
run: |
npm run check
- name: get emscripten cached location
run: |
echo "emscripten_path=$(pwd)/emsdk" >> $GITHUB_ENV
- name: cache emscripten
id: cache-emscripten
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9
with:
path: ${{ env.emscripten_path }}
key: emscripten-${{ env.emscripten_version }}
- name: install emscripten
if: steps.cache-emscripten.outputs.cache-hit != 'true'
run: |
git clone --branch ${{ env.emscripten_version }} https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
- name: add emscripten to path
run: |
echo ${{ env.emscripten_path }}/upstream/bin >> $GITHUB_PATH
echo ${{ env.emscripten_path }}/upstream/emscripten >> $GITHUB_PATH
- name: run test in node
run: |
npm run build-packages

View file

@ -3,18 +3,26 @@
# If you run out of memory (ARGON2_MEMORY_ALLOCATION_ERROR) and it's not being caused by a memory leak, try increasing this.
TOTAL_MEMORY=48MB
.PHONY: build clean
CC=emcc
WASM2JS=wasm2js
ARGON2_DIR=phc-winner-argon2
SRC_FILES = \
"${ARGON2_DIR}/src/argon2.c" \
"${ARGON2_DIR}/src/core.c" \
"${ARGON2_DIR}/src/ref.c" \
"${ARGON2_DIR}/src/blake2/blake2b.c"
clean:
rm -f $(WASM)
build:
build: $(WASM)
$(WASM):
${CC} \
"${ARGON2_DIR}/src/argon2.c" \
"${ARGON2_DIR}/src/core.c" \
"${ARGON2_DIR}/src/ref.c" \
"${ARGON2_DIR}/src/blake2/blake2b.c" \
$(SRC_FILES) \
-I "${ARGON2_DIR}/include" \
-DARGON2_NO_THREADS \
-flto \

View file

@ -3,10 +3,31 @@
# If you run out of memory and it's not being caused by a memory leak, try increasing this.
TOTAL_MEMORY=48MB
.PHONY: build include clean
CC=emcc
WASM2JS=wasm2js
TUTA_CRYPTO_LIB=../../packages/tutanota-crypto/lib/encryption/Liboqs
SRC_FILES = \
"${LIBOQS_DIR}/src/kem/kem.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/kem.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/verify.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/indcpa.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/symmetric-shake.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/poly.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/polyvec.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/cbd.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/ntt.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/reduce.c" \
"${LIBOQS_DIR}/src/kem/kyber/kem_kyber_1024.c" \
"${LIBOQS_DIR}/src/common/pqclean_shims/fips202.c" \
"${LIBOQS_DIR}/src/common/sha3/xkcp_sha3.c" \
"${LIBOQS_DIR}/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c" \
"${LIBOQS_DIR}/src/common/common.c" \
"${TUTA_CRYPTO_LIB}/rand.c" \
"${TUTA_CRYPTO_LIB}/exit.c"
LIBOQS_DIR=liboqs
clean:
@ -25,25 +46,12 @@ include:
cp "${LIBOQS_DIR}/src/kem/kem.h" include/oqs
cp "${LIBOQS_DIR}/src/sig/sig.h" include/oqs
touch include/oqs/oqsconfig.h
build: include
build: $(WASM)
$(WASM): include
${CC} \
"${LIBOQS_DIR}/src/kem/kem.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/kem.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/verify.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/indcpa.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/symmetric-shake.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/poly.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/polyvec.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/cbd.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/ntt.c" \
"${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref/reduce.c" \
"${LIBOQS_DIR}/src/kem/kyber/kem_kyber_1024.c" \
"${LIBOQS_DIR}/src/common/pqclean_shims/fips202.c" \
"${LIBOQS_DIR}/src/common/sha3/xkcp_sha3.c" \
"${LIBOQS_DIR}/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c" \
"${LIBOQS_DIR}/src/common/common.c" \
"${TUTA_CRYPTO_LIB}/rand.c" \
"${TUTA_CRYPTO_LIB}/exit.c" \
$(SRC_FILES) \
-I "include" \
-I "${LIBOQS_DIR}/src/kem/kyber/pqcrystals-kyber_kyber1024_ref" \
-I "${LIBOQS_DIR}/src/common/pqclean_shims" \

346
package-lock.json generated
View file

@ -65,7 +65,6 @@
"electron-packager": "17.1.2",
"esbuild": "0.17.15",
"esbuild-plugin-alias-path": "2.0.2",
"esbuild-plugin-wat": "^0.2.7",
"eslint": "8.44.0",
"eslint-config-prettier": "8.8.0",
"eslint-plugin-unicorn": "47.0.0",
@ -2587,6 +2586,10 @@
"uuid": "^8.3.1"
}
},
"node_modules/@tutao/tuta-wasm-loader": {
"resolved": "packages/tuta-wasm-loader",
"link": true
},
"node_modules/@tutao/tutanota-crypto": {
"resolved": "packages/tutanota-crypto",
"link": true
@ -3284,135 +3287,6 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@webassemblyjs/ast": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-ast.tgz",
"integrity": "sha512-cY3aYc1FhZdiE9wUn474Kw+l288fmWZsrfLv8fR8/5q3rcUlYO+YoHewwPDV3L0sJBh48qCKORA/+PqQG7rDYA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/helper-numbers": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-numbers.tgz",
"@webassemblyjs/helper-wasm-bytecode": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-wasm-bytecode.tgz"
}
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-floating-point-hex-parser.tgz",
"integrity": "sha512-z+6ExkIgehxOYG/AgXzBrkCJXAA9FmylpeE/85lYPounBo/eylW6NsvOkVcvzL5KETdKdxSbP0dCwxzAA5TFYA==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-api-error.tgz",
"integrity": "sha512-s47oO2lTrZ4YetGYyu7P4ueUZ3Zl+UfzGySLUFkPlxrV8amp4ySeiG0cS4zE54WYJ5ajG8x+kPcj+wmJmqjc8A==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-code-frame": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-code-frame.tgz",
"integrity": "sha512-aF2xsJ/LYz6ld4+zNDJ8AsynC3g0UiP1/u+HExz6bPFq55VP7RL0/v22tixuzlfpVkOOrtapt9DL+uFJYSZoZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/wast-printer": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-wast-printer.tgz"
}
},
"node_modules/@webassemblyjs/helper-fsm": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-fsm.tgz",
"integrity": "sha512-7GIVVj64wX4PZxQ89p/GjcMgMQW68DikfzSg18neCJvHa6d8+M0G1oUeeu2L+VfKf3DH9qfGwDjjwHiyMeATAg==",
"dev": true,
"license": "ISC"
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-numbers.tgz",
"integrity": "sha512-G9XJ1H90Po0cIEUgi3JlEg5x35k1WTjIhT1OSa6dWjP6Gu4H3unqUkdbnBHmgrdBx/TKuhm0fHarsIyGsneMSA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-floating-point-hex-parser.tgz",
"@webassemblyjs/helper-api-error": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-api-error.tgz",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-wasm-bytecode.tgz",
"integrity": "sha512-XPAPtrVginHTCjk4taKHVZq7A1mC8zcLrNS3PTWzR84IX1RUdVI7XpAulr6F6bzBHrpRfm8JDq9PhLxCqEjgvA==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/ieee754": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-ieee754.tgz",
"integrity": "sha512-xhKvCB2yysf6hg7LE52/0Q4DK9ydWkZIPwhQuGBtatSjwxU1oFd7JxQe+oqd8bmrYEd/W86Cq1FfA81IOpKTqA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
},
"node_modules/@webassemblyjs/leb128": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-leb128.tgz",
"integrity": "sha512-eXvoK2Q3MG9IXIRmVncysJDk2y7ImoztWbbRE/UytbBAFkw/c2qxTVty3gX2YhoRjAvv9/ifBqVkBZ8uh4/KSg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/utf8": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-utf8.tgz",
"integrity": "sha512-K0M8V6g1+k4hSoP/XdPvAN2y7A2FYP5IThWUTRSif1KhbiggxF1jbiVoq7YLCucWA8MZs/f5p257KKqtSKXP1A==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/wasm-parser": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-wasm-parser.tgz",
"integrity": "sha512-/jo3/7k69tIuWln/HaHKhTfm3f3zISDmCXKVFeGPc3XMPLr11EY0p3zPyHG1SKHkWETdG5LJIhMaD+CAlfk6qg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-ast.tgz",
"@webassemblyjs/helper-api-error": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-api-error.tgz",
"@webassemblyjs/helper-wasm-bytecode": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-wasm-bytecode.tgz",
"@webassemblyjs/ieee754": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-ieee754.tgz",
"@webassemblyjs/leb128": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-leb128.tgz",
"@webassemblyjs/utf8": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-utf8.tgz"
}
},
"node_modules/@webassemblyjs/wast-parser": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-wast-parser.tgz",
"integrity": "sha512-DVGZfBnzYbqyHuvAKGiDc8gw0s0MITY2zrsPGvtx2XpaNJ1tHaeNpyOHs+GvN6/k7VsuEmNqrIzTpl6apw1oSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-ast.tgz",
"@webassemblyjs/floating-point-hex-parser": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-floating-point-hex-parser.tgz",
"@webassemblyjs/helper-api-error": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-api-error.tgz",
"@webassemblyjs/helper-code-frame": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-code-frame.tgz",
"@webassemblyjs/helper-fsm": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-helper-fsm.tgz",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/wast-printer": {
"version": "1.11.1",
"resolved": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-wast-printer.tgz",
"integrity": "sha512-WFuDIpmoSfU0Du2GA/UGluMJLgKWALsGPcvkDFg3GDgxdDyva1hIW+8K6frSbv/YTwo50gBhW5dw4OB7cr6T5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "https://github.com/mitschabaude/webassemblyjs/releases/download/v1.11.1-3/webassemblyjs-ast.tgz",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@xmldom/xmldom": {
"version": "0.8.10",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
@ -3422,18 +3296,6 @@
"node": ">=10.0.0"
}
},
"node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
"node_modules/7zip-bin": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz",
@ -3934,23 +3796,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/binaryen": {
"version": "117.0.0",
"resolved": "https://registry.npmjs.org/binaryen/-/binaryen-117.0.0.tgz",
"integrity": "sha512-1D+O881OXxY737WPKfIgEscCn3vWGqTsd0m5nGKzvbtadVYw5pZ3eebineH/oV5c/rAW80Bojrsa6firSSIsUw==",
"dev": true,
"bin": {
"wasm-as": "bin/wasm-as",
"wasm-ctor-eval": "bin/wasm-ctor-eval",
"wasm-dis": "bin/wasm-dis",
"wasm-merge": "bin/wasm-merge",
"wasm-metadce": "bin/wasm-metadce",
"wasm-opt": "bin/wasm-opt",
"wasm-reduce": "bin/wasm-reduce",
"wasm-shell": "bin/wasm-shell",
"wasm2js": "bin/wasm2js"
}
},
"node_modules/bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
@ -5445,12 +5290,6 @@
"node": ">= 0.4"
}
},
"node_modules/es-module-lexer": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz",
"integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==",
"dev": true
},
"node_modules/es6-error": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
@ -5522,26 +5361,6 @@
"node": ">=12"
}
},
"node_modules/esbuild-plugin-wat": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/esbuild-plugin-wat/-/esbuild-plugin-wat-0.2.7.tgz",
"integrity": "sha512-Hb2BJHezVrKDu3zY/gAKdLa5j3l8ybgi7UDgxFHwpxjMRqmMgceBa1FIQLZovfh5bhbl1u0n4MMnhRS0yM1BNg==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-ast.tgz",
"@webassemblyjs/wasm-parser": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-wasm-parser.tgz",
"@webassemblyjs/wast-parser": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-wast-parser.tgz",
"@webassemblyjs/wast-printer": "https://github.com/mitschabaude/webassemblyjs/releases/latest/download/webassemblyjs-wast-printer.tgz",
"binaryen": "latest",
"find-cache-dir": "^3.3.1",
"minimist": "^1.2.5",
"parse-imports": "^1.1.0",
"wabt": "latest"
},
"bin": {
"watbundle": "bin/watbundle.js"
}
},
"node_modules/escalade": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
@ -6177,23 +5996,6 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
"node_modules/find-cache-dir": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
"integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
"dev": true,
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@ -7776,30 +7578,6 @@
"@jridgewell/sourcemap-codec": "^1.4.15"
}
},
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dev": true,
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/make-dir/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/make-fetch-happen": {
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
@ -8866,19 +8644,6 @@
"node": ">=0.10.0"
}
},
"node_modules/parse-imports": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-1.1.2.tgz",
"integrity": "sha512-UgTSNWlBvx+f4nxVSH3fOyJPJKol8GkFuG8mN8q9FqtmJgwaEx0azPRlXXX0klNlRxoP2gwme00TPDSm6rm/IA==",
"dev": true,
"dependencies": {
"es-module-lexer": "^1.3.0",
"slashes": "^3.0.12"
},
"engines": {
"node": ">= 12.17"
}
},
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@ -9027,79 +8792,6 @@
"node": ">=0.10.0"
}
},
"node_modules/pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/pkg-dir/node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/pkg-dir/node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/pkg-dir/node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-dir/node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/pkg-dir/node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/plist": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
@ -10162,12 +9854,6 @@
"node": ">=8"
}
},
"node_modules/slashes": {
"version": "3.0.12",
"resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
"integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
"dev": true
},
"node_modules/slice-ansi": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
@ -11025,23 +10711,6 @@
"node": ">=14"
}
},
"node_modules/wabt": {
"version": "1.0.32",
"resolved": "https://registry.npmjs.org/wabt/-/wabt-1.0.32.tgz",
"integrity": "sha512-1aHvkKaSrrl7qFtAbQ1RWVHLuJApRh7PtUdYvRtiUEKEhk0MOV0sTuz5cLF6jL5jPLRyifLbZcR65AEga/xBhQ==",
"dev": true,
"bin": {
"wasm-decompile": "bin/wasm-decompile",
"wasm-interp": "bin/wasm-interp",
"wasm-objdump": "bin/wasm-objdump",
"wasm-opcodecnt": "bin/wasm-opcodecnt",
"wasm-strip": "bin/wasm-strip",
"wasm-validate": "bin/wasm-validate",
"wasm2c": "bin/wasm2c",
"wasm2wat": "bin/wasm2wat",
"wat2wasm": "bin/wat2wasm"
}
},
"node_modules/web-streams-polyfill": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
@ -11605,6 +11274,13 @@
"typescript": "5.3.3"
}
},
"packages/tuta-wasm-loader": {
"version": "227.240429.0",
"license": "GPL-3.0",
"devDependencies": {
"typescript": "5.3.3"
}
},
"packages/tutanota-crypto": {
"name": "@tutao/tutanota-crypto",
"version": "229.240521.0",

View file

@ -8,7 +8,9 @@ export interface WasmGeneratorOptions {
}
export interface FallbackGeneratorOptions extends WasmGeneratorOptions {
/** Optimization level for the JavaScript fallback */
optimizationLevel: string
/** Tool needed to transpile the wasm file to a JavaScript file */
wasm2jsPath?: string
}

View file

@ -10,11 +10,11 @@ export interface Library {
}
export interface LoadOptions {
// Tool needed to transpile the wasm file to a JavaScript file
/** Tool needed to transpile the wasm file to a JavaScript file */
wasm2jsPath?: string
// Output path for the webassembly files
/** Output path for the webassembly files */
output: string
// List of webassembly files to be compiled and get fallback generated
/** List of webassembly files to be compiled and get fallback generated */
webassemblyLibraries: Library[]
}
@ -126,13 +126,6 @@ function rollupWasmLoader(options: LoadOptions & { output: string }) {
})
}
},
async transform(source: string, id: string) {
if (id.includes(".wasm")) {
return source
}
return null
},
}
}

View file

@ -1,30 +1,29 @@
{
"name" : "@tutao/tuta-wasm-loader",
"version" : "227.240426.1",
"license" : "GPL-3.0",
"main" : "./dist/index.js",
"types" : "./dist/index.d.ts",
"keywords" : [
"name": "@tutao/tuta-wasm-loader",
"version": "227.240429.0",
"license": "GPL-3.0",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"keywords": [
"rollup-plugin"
],
"repository" : {
"type" : "git",
"url" : "https://github.com/tutao/tutanota.git",
"directory" : "packages/tuta-wasm-loader"
"repository": {
"type": "git",
"url": "https://github.com/tutao/tutanota.git",
"directory": "packages/tuta-wasm-loader"
},
"scripts" : {
"prepublishOnly" : "npm run build",
"build" : "tsc -b"
"scripts": {
"prepublishOnly": "npm run build",
"build": "tsc -b"
},
"type" : "module",
"files" : [
"type": "module",
"files": [
"dist/*",
"README.md",
"LICENSE.txt",
"tsconfig.json"
],
"devDependencies" : {
"typescript" : "5.3.3",
"@tutao/otest": "225.240417.0"
"devDependencies": {
"typescript": "5.3.3"
}
}

View file

@ -8,6 +8,7 @@ import fs from "node:fs"
o.spec("Kyber", function () {
// We need to generate the webassembly stuff during tests
// since they're generated by esbuild during app build process
// and packages tests run before the app build.
o.before(async () => {
const currentPath = process.cwd()

View file

@ -9,7 +9,6 @@ import { libDeps, preludeEnvPlugin, sqliteNativePlugin } from "../buildSrc/esbui
import { buildPackages } from "../buildSrc/packageBuilderFunctions.js"
import { domainConfigs } from "../buildSrc/DomainConfigs.js"
import { sh } from "../buildSrc/sh.js"
import { esbuildWasmLoader } from "@tutao/tuta-wasm-loader"
export async function runTestBuild({ clean, fast = false }) {
if (clean) {
@ -38,6 +37,7 @@ export async function runTestBuild({ clean, fast = false }) {
await createUnitTestHtml(localEnv)
})
await runStep("Esbuild", async () => {
const { esbuildWasmLoader } = await import("@tutao/tuta-wasm-loader")
await esbuild({
// this is here because the test build targets esm and esbuild
// does not support dynamic requires, which better-sqlite3 uses
@ -130,7 +130,7 @@ export async function runTestBuild({ clean, fast = false }) {
env: {
WASM: `${process.cwd()}/build/wasm/liboqs.wasm`,
},
optimizationLevel: "O3",
optimizationLevel: "O1",
},
},
{
@ -141,7 +141,7 @@ export async function runTestBuild({ clean, fast = false }) {
env: {
WASM: `${process.cwd()}/build/wasm/argon2.wasm`,
},
optimizationLevel: "O3",
optimizationLevel: "O1",
},
},
],

2
types/globals.d.ts vendored
View file

@ -22,7 +22,7 @@ declare type Writeable<T> = { -readonly [P in keyof T]: T[P] }
declare type None = null | undefined
declare module "*.wasm" {
const loadWasm: (options?: { forceFallback?: boolean }) => Promise<Argon2IDExports | LibOQSExports>
const loadWasm: (options?: { forceFallback?: boolean }) => Promise<WASMExports>
export { loadWasm }
}