Sha256: d90b388c01e3d2237ae4562234448df39a7a62c64cffff75ceecd64710427e9e

Contents?: true

Size: 1.25 KB

Versions: 19

Compression:

Stored size: 1.25 KB

Contents

// Load modules

var Crypto = require('crypto');
var Boom = require('boom');


// Declare internals

var internals = {};


// Generate a cryptographically strong pseudo-random data

exports.randomString = function (size) {

    var buffer = exports.randomBits((size + 1) * 6);
    if (buffer instanceof Error) {
        return buffer;
    }

    var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
    return string.slice(0, size);
};


exports.randomBits = function (bits) {

    if (!bits ||
        bits < 0) {

        return Boom.internal('Invalid random bits count');
    }

    var bytes = Math.ceil(bits / 8);
    try {
        return Crypto.randomBytes(bytes);
    }
    catch (err) {
        return Boom.internal('Failed generating random bits: ' + err.message);
    }
};


// Compare two strings using fixed time algorithm (to prevent time-based analysis of MAC digest match)

exports.fixedTimeComparison = function (a, b) {

    var mismatch = (a.length === b.length ? 0 : 1);
    if (mismatch) {
        b = a;
    }

    for (var i = 0, il = a.length; i < il; ++i) {
        var ac = a.charCodeAt(i);
        var bc = b.charCodeAt(i);
        mismatch += (ac === bc ? 0 : 1);
    }

    return (mismatch === 0);
};


Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
ela-4.1.6 node_modules/cryptiles/lib/index.js
ela-4.1.5 node_modules/cryptiles/lib/index.js
ela-4.1.4 node_modules/cryptiles/lib/index.js
ela-4.1.3 node_modules/cryptiles/lib/index.js
ela-4.1.2 node_modules/cryptiles/lib/index.js
ela-4.1.1 node_modules/cryptiles/lib/index.js
ela-4.1.0 node_modules/cryptiles/lib/index.js
ela-4.0.0 node_modules/cryptiles/lib/index.js
ela-3.4.3 node_modules/cryptiles/lib/index.js
ela-3.4.2 node_modules/cryptiles/lib/index.js
ela-3.4.0 node_modules/cryptiles/lib/index.js
ela-3.3.1 node_modules/cryptiles/lib/index.js
ela-3.3.0 node_modules/cryptiles/lib/index.js
ela-3.2.0 node_modules/cryptiles/lib/index.js
ela-3.1.1 node_modules/cryptiles/lib/index.js
ela-3.1.0 node_modules/cryptiles/lib/index.js
ela-3.0.0 node_modules/cryptiles/lib/index.js
ela-2.0.0 node_modules/cryptiles/lib/index.js
ela-1.1.0 node_modules/cryptiles/lib/index.js