UNPKG

tweetnacl-ts

Version:

Port of TweetNaCl cryptographic library to TypeScript (and ES6)

65 lines 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var array_1 = require("./array"); var verify_1 = require("./verify"); var salsa20_1 = require("./salsa20"); var poly1305_1 = require("./poly1305"); var check_1 = require("./check"); function secretbox(msg, nonce, key) { check_1.checkArrayTypes(msg, nonce, key); check_1.checkLengths(key, nonce); var m = array_1.ByteArray(32 /* Zero */ + msg.length); var c = array_1.ByteArray(m.length); for (var i = 0; i < msg.length; i++) m[i + 32 /* Zero */] = msg[i]; _secretbox(c, m, m.length, nonce, key); return c.subarray(16 /* Overhead */); } exports.secretbox = secretbox; function secretbox_open(box, nonce, key) { check_1.checkArrayTypes(box, nonce, key); check_1.checkLengths(key, nonce); var c = array_1.ByteArray(16 /* Overhead */ + box.length); var m = array_1.ByteArray(c.length); for (var i = 0; i < box.length; i++) c[i + 16 /* Overhead */] = box[i]; if (c.length < 32 /* Zero */ || _secretbox_open(m, c, c.length, nonce, key) !== 0) return; return m.subarray(32 /* Zero */); } exports.secretbox_open = secretbox_open; // low level function _secretbox(c, m, d, n, k) { if (d < 32) return -1; salsa20_1._stream_xor(c, 0, m, 0, d, n, k); _onetimeauth(c, 16, c, 32, d - 32, c); for (var i = 0; i < 16; i++) c[i] = 0; return 0; } function _secretbox_open(m, c, d, n, k) { var x = array_1.ByteArray(32); if (d < 32) return -1; salsa20_1._stream(x, 0, 32, n, k); if (_onetimeauth_verify(c, 16, c, 32, d - 32, x) !== 0) return -1; salsa20_1._stream_xor(m, 0, c, 0, d, n, k); for (var i = 0; i < 32; i++) m[i] = 0; return 0; } function _onetimeauth(out, outpos, m, mpos, n, k) { var s = poly1305_1.poly1305_init(k); poly1305_1.poly1305_update(s, m, mpos, n); poly1305_1.poly1305_finish(s, out, outpos); return 0; } exports._onetimeauth = _onetimeauth; function _onetimeauth_verify(h, hpos, m, mpos, n, k) { var x = array_1.ByteArray(16); _onetimeauth(x, 0, m, mpos, n, k); return verify_1._verify_16(h, hpos, x, 0); } //# sourceMappingURL=secretbox.js.map