natrium
Version:
libsodium node.js bindings
844 lines (724 loc) • 24.1 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Natrium = undefined;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _isInteger = require('babel-runtime/core-js/number/is-integer');
var _isInteger2 = _interopRequireDefault(_isInteger);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _natrium = require('./build/lib/natrium.node');
var _natrium2 = _interopRequireDefault(_natrium);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Natrium = exports.Natrium = function () {
function Natrium() {
(0, _classCallCheck3.default)(this, Natrium);
this.size = {
sign_public: _natrium2.default.size_sign_public,
sign_secret: _natrium2.default.size_sign_secret,
sign_seed: _natrium2.default.size_sign_seed,
signature: _natrium2.default.size_sign,
box_public: _natrium2.default.size_box_public,
box_secret: _natrium2.default.size_box_secret,
box_key: _natrium2.default.size_box_key,
box_nonce: _natrium2.default.size_box_nonce,
box_mac: _natrium2.default.size_box_mac,
secretbox_key: _natrium2.default.size_secretbox_key,
secretbox_nonce: _natrium2.default.size_secretbox_nonce,
secretbox_mac: _natrium2.default.size_secretbox_mac
};
}
(0, _createClass3.default)(Natrium, [{
key: 'valid_sign_public',
value: function valid_sign_public(key) {
return key instanceof Buffer && key.length === this.size.sign_public;
}
}, {
key: 'valid_sign_secret',
value: function valid_sign_secret(key) {
return key instanceof Buffer && key.length === this.size.sign_secret;
}
}, {
key: 'valid_sign_seed',
value: function valid_sign_seed(seed) {
return seed instanceof Buffer && seed.length === this.size.sign_seed;
}
}, {
key: 'valid_signature',
value: function valid_signature(signature) {
return signature instanceof Buffer && signature.length === this.size.signature;
}
}, {
key: 'valid_box_public',
value: function valid_box_public(key) {
return key instanceof Buffer && key.length === this.size.box_public;
}
}, {
key: 'valid_box_secret',
value: function valid_box_secret(key) {
return key instanceof Buffer && key.length === this.size.box_secret;
}
}, {
key: 'valid_box_key',
value: function valid_box_key(key) {
return key instanceof Buffer && key.length === this.size.box_key;
}
}, {
key: 'valid_box_nonce',
value: function valid_box_nonce(nonce) {
return nonce instanceof Buffer && nonce.length === this.size.box_nonce;
}
}, {
key: 'valid_box_mac',
value: function valid_box_mac(mac) {
return mac instanceof Buffer && mac.length === this.size.box_mac;
}
}, {
key: 'valid_box_cipher',
value: function valid_box_cipher(cipher) {
return cipher instanceof Buffer && cipher.length > this.size.box_nonce + this.size.box_mac;
}
}, {
key: 'valid_secretbox_key',
value: function valid_secretbox_key(key) {
return key instanceof Buffer && key.length === this.size.secretbox_key;
}
}, {
key: 'valid_secretbox_nonce',
value: function valid_secretbox_nonce(nonce) {
return nonce instanceof Buffer && nonce.length === this.size.secretbox_nonce;
}
}, {
key: 'valid_secretbox_mac',
value: function valid_secretbox_mac(mac) {
return mac instanceof Buffer && mac.length === this.size.secretbox_mac;
}
}, {
key: 'valid_secretbox_cipher',
value: function valid_secretbox_cipher(cipher) {
return cipher instanceof Buffer && cipher.length > this.size.secretbox_nonce + this.size.secretbox_mac;
}
}, {
key: 'valid_allocate_size',
value: function valid_allocate_size() {
return (0, _isInteger2.default)(size) && size > 0;
}
}, {
key: 'valid_message',
value: function valid_message(message) {
return message instanceof Buffer && message.length > 0;
}
}, {
key: 'validate_sign_public',
value: function validate_sign_public(key) {
if (!(key instanceof Buffer && key.length === this.size.sign_public)) throw new Error('sign_public:key should be a Buffer of size ' + this.size.sign_public);
}
}, {
key: 'validate_sign_secret',
value: function validate_sign_secret(key) {
if (!(key instanceof Buffer && key.length === this.size.sign_secret)) throw new Error('sign_secret:key should be a Buffer of size ' + this.size.sign_secret);
}
}, {
key: 'validate_sign_seed',
value: function validate_sign_seed(seed) {
if (!(seed instanceof Buffer && seed.length === this.size.sign_seed)) throw new Error('sign_seed:seed should be a Buffer of size ' + this.size.sign_seed);
}
}, {
key: 'validate_signature',
value: function validate_signature(signature) {
if (!(signature instanceof Buffer && signature.length === this.size.signature)) throw new Error('signature:signature should be a Buffer of size ' + this.size.signature);
}
}, {
key: 'validate_box_public',
value: function validate_box_public(key) {
if (!(key instanceof Buffer && key.length === this.size.box_public)) throw new Error('box_public:key should be a Buffer of size ' + this.size.box_public);
}
}, {
key: 'validate_box_secret',
value: function validate_box_secret(key) {
if (!(key instanceof Buffer && key.length === this.size.box_secret)) throw new Error('box_secret:key should be a Buffer of size ' + this.size.box_secret);
}
}, {
key: 'validate_box_key',
value: function validate_box_key(key) {
if (!(key instanceof Buffer && key.length === this.size.box_key)) throw new Error('box_key:key should be a Buffer of size ' + this.size.box_key);
}
}, {
key: 'validate_box_nonce',
value: function validate_box_nonce(nonce) {
if (!(nonce instanceof Buffer && nonce.length === this.size.box_nonce)) throw new Error('box_nonce:nonce should be a Buffer of size ' + this.size.box_nonce);
}
}, {
key: 'validate_box_mac',
value: function validate_box_mac(mac) {
if (!(mac instanceof Buffer && mac.length === this.size.box_mac)) throw new Error('box_mac:mac should be a Buffer of size ' + this.size.box_mac);
}
}, {
key: 'validate_box_cipher',
value: function validate_box_cipher(cipher) {
if (!(cipher instanceof Buffer && cipher.length > this.size.box_nonce + this.size.box_mac)) throw new Error('box_cipher:cipher should be a Buffer of size greater than ' + (this.size.box_nonce + this.size.box_mac));
}
}, {
key: 'validate_secretbox_key',
value: function validate_secretbox_key(key) {
if (!(key instanceof Buffer && key.length === this.size.secretbox_key)) throw new Error('secretbox_key:key should be a Buffer of size ' + this.size.secretbox_key);
}
}, {
key: 'validate_secretbox_nonce',
value: function validate_secretbox_nonce(nonce) {
if (!(nonce instanceof Buffer && nonce.length === this.size.secretbox_nonce)) throw new Error('secretbox_nonce:nonce should be a Buffer of size ' + this.size.secretbox_nonce);
}
}, {
key: 'validate_secretbox_mac',
value: function validate_secretbox_mac(mac) {
if (!(mac instanceof Buffer && mac.length === this.size.secretbox_mac)) throw new Error('secretbox_mac:mac should be a Buffer of size ' + this.size.secretbox_mac);
}
}, {
key: 'validate_secretbox_cipher',
value: function validate_secretbox_cipher(cipher) {
if (!(cipher instanceof Buffer && cipher.length > this.size.secretbox_nonce + this.size.secretbox_mac)) throw new Error('secretbox_cipher:cipher should be a Buffer of size greater than ' + (this.size.secretbox_nonce + this.size.secretbox_mac));
}
}, {
key: 'validate_size',
value: function validate_size(size) {
if (!((0, _isInteger2.default)(size) && size > 0)) throw new Error('size should be a Number greater than 0');
}
}, {
key: 'validate_message',
value: function validate_message(message) {
if (!(message instanceof Buffer && message.length > 0)) throw new Error('message should be a Buffer of size greater than 0');
}
}, {
key: 'random',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(size) {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return this.validate_size(size);
case 3:
_context.next = 5;
return new _promise2.default(function (success) {
_natrium2.default.random(size, success);
});
case 5:
return _context.abrupt('return', _context.sent);
case 8:
_context.prev = 8;
_context.t0 = _context['catch'](0);
throw _context.t0;
case 11:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[0, 8]]);
}));
function random(_x) {
return ref.apply(this, arguments);
}
return random;
}()
}, {
key: 'random_seed',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return new _promise2.default(function (success) {
_natrium2.default.random_seed(success);
});
case 3:
return _context2.abrupt('return', _context2.sent);
case 6:
_context2.prev = 6;
_context2.t0 = _context2['catch'](0);
throw _context2.t0;
case 9:
case 'end':
return _context2.stop();
}
}
}, _callee2, this, [[0, 6]]);
}));
function random_seed() {
return ref.apply(this, arguments);
}
return random_seed;
}()
}, {
key: 'sign_keypair',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(seed) {
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
_context3.next = 3;
return this.validate_sign_seed(seed);
case 3:
_context3.next = 5;
return new _promise2.default(function (success, fail) {
_natrium2.default.sign_keypair(seed, function (error, pk, sk) {
if (error) return fail(error);
success({ public: pk, secret: sk, seed: seed });
});
});
case 5:
return _context3.abrupt('return', _context3.sent);
case 8:
_context3.prev = 8;
_context3.t0 = _context3['catch'](0);
throw _context3.t0;
case 11:
case 'end':
return _context3.stop();
}
}
}, _callee3, this, [[0, 8]]);
}));
function sign_keypair(_x2) {
return ref.apply(this, arguments);
}
return sign_keypair;
}()
}, {
key: 'new_sign_keypair',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.prev = 0;
_context4.t0 = this;
_context4.next = 4;
return this.random_seed();
case 4:
_context4.t1 = _context4.sent;
_context4.next = 7;
return _context4.t0.sign_keypair.call(_context4.t0, _context4.t1);
case 7:
return _context4.abrupt('return', _context4.sent);
case 10:
_context4.prev = 10;
_context4.t2 = _context4['catch'](0);
throw _context4.t2;
case 13:
case 'end':
return _context4.stop();
}
}
}, _callee4, this, [[0, 10]]);
}));
function new_sign_keypair() {
return ref.apply(this, arguments);
}
return new_sign_keypair;
}()
}, {
key: 'sign',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(secret, message) {
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.prev = 0;
_context5.next = 3;
return this.validate_sign_secret(secret);
case 3:
_context5.next = 5;
return this.validate_message(message);
case 5:
_context5.next = 7;
return new _promise2.default(function (success, fail) {
_natrium2.default.sign(secret, message, function (error, signature) {
if (error) return fail(error);
success(signature);
});
});
case 7:
return _context5.abrupt('return', _context5.sent);
case 10:
_context5.prev = 10;
_context5.t0 = _context5['catch'](0);
throw _context5.t0;
case 13:
case 'end':
return _context5.stop();
}
}
}, _callee5, this, [[0, 10]]);
}));
function sign(_x3, _x4) {
return ref.apply(this, arguments);
}
return sign;
}()
}, {
key: 'verify',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(pk, signature, message) {
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.prev = 0;
_context6.next = 3;
return this.validate_sign_public(pk);
case 3:
_context6.next = 5;
return this.validate_signature(signature);
case 5:
_context6.next = 7;
return this.validate_message(message);
case 7:
_context6.next = 9;
return new _promise2.default(function (success, fail) {
_natrium2.default.verify(pk, signature, message, function (error) {
if (error) return fail(error);
success();
});
});
case 9:
return _context6.abrupt('return', _context6.sent);
case 12:
_context6.prev = 12;
_context6.t0 = _context6['catch'](0);
throw _context6.t0;
case 15:
case 'end':
return _context6.stop();
}
}
}, _callee6, this, [[0, 12]]);
}));
function verify(_x5, _x6, _x7) {
return ref.apply(this, arguments);
}
return verify;
}()
}, {
key: 'box_keypair',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7() {
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
_context7.prev = 0;
_context7.next = 3;
return new _promise2.default(function (success, fail) {
_natrium2.default.box_keypair(function (error, pk, sk) {
if (error) return fail(error);
success({ public: pk, secret: sk });
});
});
case 3:
return _context7.abrupt('return', _context7.sent);
case 6:
_context7.prev = 6;
_context7.t0 = _context7['catch'](0);
throw _context7.t0;
case 9:
case 'end':
return _context7.stop();
}
}
}, _callee7, this, [[0, 6]]);
}));
function box_keypair() {
return ref.apply(this, arguments);
}
return box_keypair;
}()
}, {
key: 'box_key',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(secret, pk) {
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
_context8.prev = 0;
_context8.next = 3;
return this.validate_box_secret(secret);
case 3:
_context8.next = 5;
return this.validate_box_public(pk);
case 5:
_context8.next = 7;
return new _promise2.default(function (success, fail) {
_natrium2.default.box_key(pk, secret, function (error, key) {
if (error) return fail(error);
success(key);
});
});
case 7:
return _context8.abrupt('return', _context8.sent);
case 10:
_context8.prev = 10;
_context8.t0 = _context8['catch'](0);
throw _context8.t0;
case 13:
case 'end':
return _context8.stop();
}
}
}, _callee8, this, [[0, 10]]);
}));
function box_key(_x8, _x9) {
return ref.apply(this, arguments);
}
return box_key;
}()
}, {
key: 'zero',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(secret) {
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
_context9.prev = 0;
if (secret instanceof Buffer && secret.length > 0) {
_context9.next = 3;
break;
}
throw new Error('zero:secret should be a buffer of a size greater than 0');
case 3:
_context9.next = 5;
return new _promise2.default(function (success) {
_natrium2.default.zero(secret, success);
});
case 5:
return _context9.abrupt('return', _context9.sent);
case 8:
_context9.prev = 8;
_context9.t0 = _context9['catch'](0);
throw _context9.t0;
case 11:
case 'end':
return _context9.stop();
}
}
}, _callee9, this, [[0, 8]]);
}));
function zero(_x10) {
return ref.apply(this, arguments);
}
return zero;
}()
}, {
key: 'encrypt',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(key, message) {
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
_context10.prev = 0;
_context10.next = 3;
return this.validate_box_key(key);
case 3:
_context10.next = 5;
return this.validate_message(message);
case 5:
_context10.next = 7;
return new _promise2.default(function (success, fail) {
_natrium2.default.encrypt(key, message, function (error, cipher) {
if (error) return fail(error);
success(cipher);
});
});
case 7:
return _context10.abrupt('return', _context10.sent);
case 10:
_context10.prev = 10;
_context10.t0 = _context10['catch'](0);
throw _context10.t0;
case 13:
case 'end':
return _context10.stop();
}
}
}, _callee10, this, [[0, 10]]);
}));
function encrypt(_x11, _x12) {
return ref.apply(this, arguments);
}
return encrypt;
}()
}, {
key: 'decrypt',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(key, cipher) {
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
_context11.prev = 0;
_context11.next = 3;
return this.validate_box_key(key);
case 3:
_context11.next = 5;
return this.validate_box_cipher(cipher);
case 5:
_context11.next = 7;
return new _promise2.default(function (success, fail) {
_natrium2.default.decrypt(key, cipher, function (error, message) {
if (error) return fail(error);
success(message);
});
});
case 7:
return _context11.abrupt('return', _context11.sent);
case 10:
_context11.prev = 10;
_context11.t0 = _context11['catch'](0);
throw _context11.t0;
case 13:
case 'end':
return _context11.stop();
}
}
}, _callee11, this, [[0, 10]]);
}));
function decrypt(_x13, _x14) {
return ref.apply(this, arguments);
}
return decrypt;
}()
}, {
key: 'secretbox_key',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12() {
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
_context12.prev = 0;
_context12.next = 3;
return new _promise2.default(function (success) {
_natrium2.default.secretbox_key(success);
});
case 3:
return _context12.abrupt('return', _context12.sent);
case 6:
_context12.prev = 6;
_context12.t0 = _context12['catch'](0);
throw _context12.t0;
case 9:
case 'end':
return _context12.stop();
}
}
}, _callee12, this, [[0, 6]]);
}));
function secretbox_key() {
return ref.apply(this, arguments);
}
return secretbox_key;
}()
}, {
key: 'secretbox_encrypt',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee13(key, message) {
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
switch (_context13.prev = _context13.next) {
case 0:
_context13.prev = 0;
_context13.next = 3;
return this.validate_secretbox_key(key);
case 3:
_context13.next = 5;
return this.validate_message(message);
case 5:
_context13.next = 7;
return new _promise2.default(function (success, fail) {
_natrium2.default.secretbox_encrypt(key, message, function (error, cipher) {
if (error) return fail(error);
success(cipher);
});
});
case 7:
return _context13.abrupt('return', _context13.sent);
case 10:
_context13.prev = 10;
_context13.t0 = _context13['catch'](0);
throw _context13.t0;
case 13:
case 'end':
return _context13.stop();
}
}
}, _callee13, this, [[0, 10]]);
}));
function secretbox_encrypt(_x15, _x16) {
return ref.apply(this, arguments);
}
return secretbox_encrypt;
}()
}, {
key: 'secretbox_decrypt',
value: function () {
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee14(key, cipher) {
return _regenerator2.default.wrap(function _callee14$(_context14) {
while (1) {
switch (_context14.prev = _context14.next) {
case 0:
_context14.prev = 0;
_context14.next = 3;
return this.validate_secretbox_key(key);
case 3:
_context14.next = 5;
return this.validate_secretbox_cipher(cipher);
case 5:
_context14.next = 7;
return new _promise2.default(function (success, fail) {
_natrium2.default.decrypt(key, cipher, function (error, message) {
if (error) return fail(error);
success(message);
});
});
case 7:
return _context14.abrupt('return', _context14.sent);
case 10:
_context14.prev = 10;
_context14.t0 = _context14['catch'](0);
throw _context14.t0;
case 13:
case 'end':
return _context14.stop();
}
}
}, _callee14, this, [[0, 10]]);
}));
function secretbox_decrypt(_x17, _x18) {
return ref.apply(this, arguments);
}
return secretbox_decrypt;
}()
}]);
return Natrium;
}();
var na = new Natrium();
exports.default = na;