philips-software/cogito

View on GitHub
workspaces/crypto/source/crypto.js

Summary

Maintainability
A
0 mins
Test Coverage
F
5%
import sodium from 'libsodium-wrappers'
let ready = false

async function waitUntilReady () {
  if (!ready) {
    await sodium.ready
    ready = true
  }
}

async function random (...args) {
  await waitUntilReady()
  return sodium.randombytes_buf(...args)
}

async function randomHex (...args) {
  await waitUntilReady()
  return sodium.to_hex(sodium.randombytes_buf(...args))
}

async function encrypt (...args) {
  await waitUntilReady()
  return sodium.crypto_secretbox_easy(...args)
}

async function decrypt (...args) {
  await waitUntilReady()
  return sodium.crypto_secretbox_open_easy(...args)
}

async function keySize () {
  await waitUntilReady()
  return sodium.crypto_secretbox_KEYBYTES
}

async function nonceSize () {
  await waitUntilReady()
  return sodium.crypto_secretbox_NONCEBYTES
}

async function toHex (...args) {
  await waitUntilReady()
  return sodium.to_hex(...args)
}

async function cryptoGenericHash (...args) {
  await waitUntilReady()
  return sodium.crypto_generichash(sodium.crypto_generichash_BYTES, ...args)
}

export { toHex, random, randomHex, encrypt, decrypt, keySize, nonceSize, cryptoGenericHash }