pqclean
Version:
Node.js bindings for all post-quantum implementations included in PQClean
37 lines (31 loc) • 1.09 kB
JavaScript
;
const installConfig = require('./install-config.gen.js');
const { kem, sign, KEM, Sign } = (function loadBackend(backend) {
switch (backend) {
case 'prefer-native':
try {
return loadBackend('native');
} catch (err) {
// Use WebAssembly backend only if native bindings are not available.
process.emitWarning(`Using WebAssembly backend: ${err.message}`);
return loadBackend('wasm');
}
case 'native':
return require('bindings')('node_pqclean');
case 'wasm':
return require('./wasm/');
default:
throw new Error(`Unsupported backend: ${backend}`);
}
})(installConfig.backend);
// TODO: should we deep-freeze these?
Object.freeze(kem.supportedAlgorithms);
Object.freeze(sign.supportedAlgorithms);
Object.freeze(KEM.supportedAlgorithms);
Object.freeze(Sign.supportedAlgorithms);
Object.defineProperties(module.exports, {
kem: { value: kem, enumerable: true },
sign: { value: sign, enumerable: true },
KEM: { value: KEM, enumerable: true },
Sign: { value: Sign, enumerable: true }
});