key-forge
Version:
A simple random key generator for use with Node.
78 lines (72 loc) • 1.96 kB
JavaScript
// Generated by CoffeeScript 1.8.0
(function() {
var Buffer, Crypto, Keys,
__slice = [].slice;
Crypto = require("crypto");
Buffer = (require("buffer")).Buffer;
Keys = {
randomKey: function(size, format) {
if (format == null) {
format = "hex";
}
return Keys.bufferToKey(Keys.randomBytes(size), format);
},
randomBytes: function(size) {
return Crypto.randomBytes(size);
},
numberToKey: function(number) {
return Keys.bufferToKey(Keys.numberToBytes(number));
},
numberToBytes: function(number, size) {
var bytes, x;
if (size == null) {
size = 8;
}
bytes = [];
x = number;
while (x >= 256) {
bytes.push(x % 256);
x = Math.floor(x / 256);
}
bytes.push(x);
while (bytes.length < size) {
bytes.push(0);
}
return new Buffer(bytes.reverse());
},
bytesToNumber: function(bytes) {
var byte, x, _i, _len;
x = 0;
for (_i = 0, _len = bytes.length; _i < _len; _i++) {
byte = bytes[_i];
x *= 256;
x += byte;
}
return x;
},
bufferToKey: function(buffer, format) {
if (format == null) {
format = "hex";
}
switch (format) {
case "hex":
return buffer.toString("hex");
case "base64":
return buffer.toString("base64").replace(/\=+$/, '');
case "base64url":
return Keys.sanitize(buffer.toString("base64"));
default:
throw new Error("Unknown format: '" + format + "'");
}
},
sanitize: function(string) {
return string.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, '');
},
buffersToKey: function() {
var buffers;
buffers = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
return Keys.bufferToKey(Buffer.concat(buffers));
}
};
module.exports = Keys;
}).call(this);