"use strict"; /* istanbul ignore if */ if (typeof (Buffer) === 'undefined') { let Buffer = require('buffer/').Buffer; } const arrayToBuffer = require('typedarray-to-buffer'); module.exports = class Util { static async cloneBuffer(buf) { return Buffer.from(buf); } /** * Define the sodium constants * * @param {object} anyobject * @return {object} */ static populateConstants(anyobject) { anyobject.LIBRARY_VERSION_MAJOR = 10; anyobject.LIBRARY_VERSION_MINOR = 2; anyobject.VERSION_STRING = '1.0.17'; anyobject.BASE64_VARIANT_ORIGINAL = 1; anyobject.BASE64_VARIANT_ORIGINAL_NO_PADDING = 3; anyobject.BASE64_VARIANT_URLSAFE = 5; anyobject.BASE64_VARIANT_URLSAFE_NO_PADDING = 7; anyobject.CRYPTO_AEAD_AES256GCM_KEYBYTES = 32; anyobject.CRYPTO_AEAD_AES256GCM_NSECBYTES = 0; anyobject.CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12; anyobject.CRYPTO_AEAD_AES256GCM_ABYTES = 16; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = 32; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = 0; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = 8; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_ABYTES = 16; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES = 32; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES = 0; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES = 12; anyobject.CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES = 16; anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES = 32; anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES = 0; anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES = 24; anyobject.CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES = 16; anyobject.CRYPTO_AUTH_BYTES = 32; anyobject.CRYPTO_AUTH_KEYBYTES = 32; anyobject.CRYPTO_BOX_SEALBYTES = 16; anyobject.CRYPTO_BOX_SECRETKEYBYTES = 32; anyobject.CRYPTO_BOX_PUBLICKEYBYTES = 32; anyobject.CRYPTO_BOX_KEYPAIRBYTES = 64; anyobject.CRYPTO_BOX_MACBYTES = 16; anyobject.CRYPTO_BOX_NONCEBYTES = 24; anyobject.CRYPTO_BOX_SEEDBYTES = 32; anyobject.CRYPTO_KDF_BYTES_MIN = 16; anyobject.CRYPTO_KDF_BYTES_MAX = 64; anyobject.CRYPTO_KDF_CONTEXTBYTES = 8; anyobject.CRYPTO_KDF_KEYBYTES = 32; anyobject.CRYPTO_KX_BYTES = 32; anyobject.CRYPTO_KX_PRIMITIVE = 'x25519blake2b'; anyobject.CRYPTO_KX_SEEDBYTES = 32; anyobject.CRYPTO_KX_KEYPAIRBYTES = 64; anyobject.CRYPTO_KX_PUBLICKEYBYTES = 32; anyobject.CRYPTO_KX_SECRETKEYBYTES = 32; anyobject.CRYPTO_KX_SESSIONKEYBYTES = 32; anyobject.CRYPTO_GENERICHASH_BYTES = 32; anyobject.CRYPTO_GENERICHASH_BYTES_MIN = 16; anyobject.CRYPTO_GENERICHASH_BYTES_MAX = 64; anyobject.CRYPTO_GENERICHASH_KEYBYTES = 32; anyobject.CRYPTO_GENERICHASH_KEYBYTES_MIN = 16; anyobject.CRYPTO_GENERICHASH_KEYBYTES_MAX = 64; anyobject.CRYPTO_GENERICHASH_STATEBYTES = 384; anyobject.CRYPTO_PWHASH_SALTBYTES = 16; anyobject.CRYPTO_PWHASH_STRPREFIX = '$argon2id$'; anyobject.CRYPTO_PWHASH_ALG_ARGON2I13 = 1; anyobject.CRYPTO_PWHASH_ALG_ARGON2ID13 = 2; anyobject.CRYPTO_PWHASH_ALG_DEFAULT = anyobject.CRYPTO_PWHASH_ALG_ARGON2ID13; anyobject.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE = 2; anyobject.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 67108864; anyobject.CRYPTO_PWHASH_OPSLIMIT_MODERATE = 3; anyobject.CRYPTO_PWHASH_MEMLIMIT_MODERATE = 268435456; anyobject.CRYPTO_PWHASH_OPSLIMIT_SENSITIVE = 4; anyobject.CRYPTO_PWHASH_MEMLIMIT_SENSITIVE = 1073741824; anyobject.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES = 32; anyobject.CRYPTO_SCALARMULT_BYTES = 32; anyobject.CRYPTO_SCALARMULT_SCALARBYTES = 32; anyobject.CRYPTO_SHORTHASH_BYTES = 8; anyobject.CRYPTO_SHORTHASH_KEYBYTES = 16; anyobject.CRYPTO_SECRETBOX_KEYBYTES = 32; anyobject.CRYPTO_SECRETBOX_MACBYTES = 16; anyobject.CRYPTO_SECRETBOX_NONCEBYTES = 24; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_STATEBYTES = 52; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES = 17; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES = 24; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES = 32; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH = 0; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL = 1; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY = 2; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL = 3; anyobject.CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX = 0x3fffffff80; anyobject.CRYPTO_SIGN_BYTES = 64; anyobject.CRYPTO_SIGN_SEEDBYTES = 32; anyobject.CRYPTO_SIGN_PUBLICKEYBYTES = 32; anyobject.CRYPTO_SIGN_SECRETKEYBYTES = 64; anyobject.CRYPTO_SIGN_KEYPAIRBYTES = 96; anyobject.CRYPTO_STREAM_KEYBYTES = 32; anyobject.CRYPTO_STREAM_NONCEBYTES = 24; return anyobject; } /** * Coerce input to a Buffer, throwing a TypeError if it cannot be coerced. * * @param {string|Buffer|Uint8Array|Promise} stringOrBuffer * @returns {Buffer} */ static async toBuffer(stringOrBuffer) { if (Buffer.isBuffer(stringOrBuffer)) { return stringOrBuffer; } else if (stringOrBuffer === null) { return null; } else if (typeof(stringOrBuffer) === 'string') { return Buffer.from(stringOrBuffer, 'binary'); } else if (stringOrBuffer instanceof Uint8Array) { return arrayToBuffer(stringOrBuffer); } else if (stringOrBuffer instanceof Promise) { return await stringOrBuffer; } else { throw new TypeError('Invalid type; string or buffer expected'); } } };