UNPKG

kyber-crystals

Version:

JavaScript wrapper for a WebAssembly build of Kyber

101 lines (92 loc) 2.75 kB
all: make clean bash -c ' \ args="$$(echo " \ --memory-init-file 0 \ -s SINGLE_FILE=1 \ -s TOTAL_MEMORY=16777216 -s TOTAL_STACK=8388608 \ -s ASSERTIONS=0 \ -s AGGRESSIVE_VARIABLE_ELIMINATION=1 \ -s ALIASING_FUNCTION_POINTERS=1 \ -s DISABLE_EXCEPTION_CATCHING=1 \ -s NO_FILESYSTEM=1 \ -s ERROR_ON_UNDEFINED_SYMBOLS=0 \ -Ilibsodium/src/libsodium/include/sodium \ -Ipqclean/common \ -Ipqclean/crypto_kem/kyber1024/clean \ libsodium/src/libsodium/randombytes/randombytes.c \ $$( \ find \ pqclean/common \ pqclean/crypto_kem/kyber1024/clean \ -name '"'"'*.c'"'"' -type f \ -not \( \ -path '*/keccak4x/*' -or \ -name randombytes.c \ \) \ ) \ main.c \ -s EXPORTED_RUNTIME_METHODS=\"[ \ '"'"'writeArrayToMemory'"'"' \ ]\" \ -s EXPORTED_FUNCTIONS=\"[ \ '"'"'_free'"'"', \ '"'"'_malloc'"'"', \ '"'"'_kyberjs_init'"'"', \ '"'"'_kyberjs_keypair'"'"', \ '"'"'_kyberjs_encrypt'"'"', \ '"'"'_kyberjs_decrypt'"'"', \ '"'"'_kyberjs_public_key_bytes'"'"', \ '"'"'_kyberjs_private_key_bytes'"'"', \ '"'"'_kyberjs_cyphertext_bytes'"'"', \ '"'"'_kyberjs_secret_bytes'"'"' \ ]\" \ " | perl -pe "s/\s+/ /g" | perl -pe "s/\[ /\[/g" | perl -pe "s/ \]/\]/g")"; \ \ bash -c "emcc -Oz -s WASM=0 $$args -o dist/index.asm.js"; \ bash -c "emcc -O3 -s WASM=1 $$args -o dist/index.wasm.js"; \ ' npx babel --no-babelrc --presets @babel/preset-env dist/index.asm.js -o dist/index.asm.js npx babel --no-babelrc --presets @babel/preset-env dist/index.wasm.js -o dist/index.wasm.js cp pre.js dist/index.tmp.js echo " \ var Module = {}; \ Module.ready = new Promise(function (resolve, reject) { \ var Module = {}; \ Module.onAbort = reject; \ Module.onRuntimeInitialized = function () { \ try { \ Module._kyberjs_public_key_bytes(); \ resolve(Module); \ } \ catch (err) { \ reject(err); \ } \ }; \ " >> dist/index.tmp.js cat dist/index.wasm.js >> dist/index.tmp.js echo " \ }).catch(function () { \ var Module = {}; \ " >> dist/index.tmp.js cat dist/index.asm.js >> dist/index.tmp.js echo " \ return new Promise(function (resolve, reject) { \ Module.onAbort = reject; \ Module.onRuntimeInitialized = function () { resolve(Module); }; \ }); \ }).then(function (m) { \ Object.keys(m).forEach(function (k) { Module[k] = m[k]; }); \ }); \ " >> dist/index.tmp.js cat post.js >> dist/index.tmp.js npx terser dist/index.tmp.js -cmo dist/index.js sed -i 's|use asm||g' dist/index.js sed -i 's|require(|eval("require")(|g' dist/index.js rm -rf dist/index.*.js chmod -R 777 dist clean: rm -rf dist 2> /dev/null mkdir dist test: npm run test