module: crypto_box
This commit is contained in:
parent
5dd22a0957
commit
6a9696c86f
77
crypto_box.js
Normal file
77
crypto_box.js
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
module.exports = {
|
||||||
|
crypto_box_keypair,
|
||||||
|
crypto_box_seal,
|
||||||
|
crypto_box_seal_open,
|
||||||
|
crypto_box_PUBLICKEYBYTES,
|
||||||
|
crypto_box_SECRETKEYBYTES,
|
||||||
|
crypto_box_BEFORENMBYTES,
|
||||||
|
crypto_box_NONCEBYTES,
|
||||||
|
crypto_box_ZEROBYTES,
|
||||||
|
crypto_box_BOXZEROBYTES,
|
||||||
|
crypto_box_SEALBYTES,
|
||||||
|
crypto_box_BEFORENMBYTES
|
||||||
|
}
|
||||||
|
|
||||||
|
function crypto_box_keypair(pk, sk) {
|
||||||
|
check(pk, crypto_box_PUBLICKEYBYTES)
|
||||||
|
check(sk, crypto_box_SECRETKEYBYTES)
|
||||||
|
randombytes(sk, 32)
|
||||||
|
return crypto_scalarmult_base(pk, sk)
|
||||||
|
}
|
||||||
|
|
||||||
|
function crypto_box_seal(c, m, pk) {
|
||||||
|
check(c, crypto_box_SEALBYTES + m.length)
|
||||||
|
check(pk, crypto_box_PUBLICKEYBYTES)
|
||||||
|
|
||||||
|
var epk = c.subarray(0, crypto_box_PUBLICKEYBYTES)
|
||||||
|
var esk = new Uint8Array(crypto_box_SECRETKEYBYTES)
|
||||||
|
crypto_box_keypair(epk, esk)
|
||||||
|
|
||||||
|
var n = new Uint8Array(crypto_box_NONCEBYTES)
|
||||||
|
sodium.crypto_generichash_batch(n, [ epk, pk ])
|
||||||
|
|
||||||
|
var s = new Uint8Array(crypto_box_PUBLICKEYBYTES)
|
||||||
|
crypto_scalarmult(s, esk, pk)
|
||||||
|
|
||||||
|
var k = new Uint8Array(crypto_box_BEFORENMBYTES)
|
||||||
|
var zero = new Uint8Array(16)
|
||||||
|
xsalsa20.core_hsalsa20(k, zero, s, xsalsa20.SIGMA)
|
||||||
|
|
||||||
|
crypto_secretbox_easy(c.subarray(epk.length), m, n, k)
|
||||||
|
|
||||||
|
cleanup(esk)
|
||||||
|
}
|
||||||
|
|
||||||
|
function crypto_box_seal_open(m, c, pk, sk) {
|
||||||
|
check(c, crypto_box_SEALBYTES)
|
||||||
|
check(m, c.length - crypto_box_SEALBYTES)
|
||||||
|
check(pk, crypto_box_PUBLICKEYBYTES)
|
||||||
|
check(sk, crypto_box_SECRETKEYBYTES)
|
||||||
|
|
||||||
|
var epk = c.subarray(0, crypto_box_PUBLICKEYBYTES)
|
||||||
|
|
||||||
|
var n = new Uint8Array(crypto_box_NONCEBYTES)
|
||||||
|
sodium.crypto_generichash_batch(n, [ epk, pk ])
|
||||||
|
|
||||||
|
var s = new Uint8Array(crypto_box_PUBLICKEYBYTES)
|
||||||
|
crypto_scalarmult(s, sk, epk)
|
||||||
|
|
||||||
|
var k = new Uint8Array(crypto_box_BEFORENMBYTES)
|
||||||
|
var zero = new Uint8Array(16)
|
||||||
|
xsalsa20.core_hsalsa20(k, zero, s, xsalsa20.SIGMA)
|
||||||
|
|
||||||
|
return crypto_secretbox_open_easy(m, c.subarray(epk.length), n, k)
|
||||||
|
}
|
||||||
|
|
||||||
|
function check (buf, len) {
|
||||||
|
if (!buf || (len && buf.length < len)) throw new Error('Argument must be a buffer' + (len ? ' of length ' + len : ''))
|
||||||
|
}
|
||||||
|
|
||||||
|
var crypto_box_PUBLICKEYBYTES = 32,
|
||||||
|
crypto_box_SECRETKEYBYTES = 32,
|
||||||
|
crypto_box_BEFORENMBYTES = 32,
|
||||||
|
crypto_box_NONCEBYTES = 24,
|
||||||
|
crypto_box_ZEROBYTES = 32,
|
||||||
|
crypto_box_BOXZEROBYTES = 16,
|
||||||
|
crypto_box_SEALBYTES = 48,
|
||||||
|
crypto_box_BEFORENMBYTES = 32
|
70
index.js
70
index.js
@ -13,68 +13,6 @@ var sodium = module.exports
|
|||||||
// also forwarded at the bottom but randombytes is non-enumerable
|
// also forwarded at the bottom but randombytes is non-enumerable
|
||||||
var randombytes = require('./randombytes').randombytes
|
var randombytes = require('./randombytes').randombytes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function crypto_box_keypair(pk, sk) {
|
|
||||||
check(pk, crypto_box_PUBLICKEYBYTES)
|
|
||||||
check(sk, crypto_box_SECRETKEYBYTES)
|
|
||||||
randombytes(sk, 32)
|
|
||||||
return crypto_scalarmult_base(pk, sk)
|
|
||||||
}
|
|
||||||
|
|
||||||
function crypto_box_seal(c, m, pk) {
|
|
||||||
check(c, crypto_box_SEALBYTES + m.length)
|
|
||||||
check(pk, crypto_box_PUBLICKEYBYTES)
|
|
||||||
|
|
||||||
var epk = c.subarray(0, crypto_box_PUBLICKEYBYTES)
|
|
||||||
var esk = new Uint8Array(crypto_box_SECRETKEYBYTES)
|
|
||||||
crypto_box_keypair(epk, esk)
|
|
||||||
|
|
||||||
var n = new Uint8Array(crypto_box_NONCEBYTES)
|
|
||||||
sodium.crypto_generichash_batch(n, [ epk, pk ])
|
|
||||||
|
|
||||||
var s = new Uint8Array(crypto_box_PUBLICKEYBYTES)
|
|
||||||
crypto_scalarmult(s, esk, pk)
|
|
||||||
|
|
||||||
var k = new Uint8Array(crypto_box_BEFORENMBYTES)
|
|
||||||
var zero = new Uint8Array(16)
|
|
||||||
xsalsa20.core_hsalsa20(k, zero, s, xsalsa20.SIGMA)
|
|
||||||
|
|
||||||
crypto_secretbox_easy(c.subarray(epk.length), m, n, k)
|
|
||||||
|
|
||||||
cleanup(esk)
|
|
||||||
}
|
|
||||||
|
|
||||||
function crypto_box_seal_open(m, c, pk, sk) {
|
|
||||||
check(c, crypto_box_SEALBYTES)
|
|
||||||
check(m, c.length - crypto_box_SEALBYTES)
|
|
||||||
check(pk, crypto_box_PUBLICKEYBYTES)
|
|
||||||
check(sk, crypto_box_SECRETKEYBYTES)
|
|
||||||
|
|
||||||
var epk = c.subarray(0, crypto_box_PUBLICKEYBYTES)
|
|
||||||
|
|
||||||
var n = new Uint8Array(crypto_box_NONCEBYTES)
|
|
||||||
sodium.crypto_generichash_batch(n, [ epk, pk ])
|
|
||||||
|
|
||||||
var s = new Uint8Array(crypto_box_PUBLICKEYBYTES)
|
|
||||||
crypto_scalarmult(s, sk, epk)
|
|
||||||
|
|
||||||
var k = new Uint8Array(crypto_box_BEFORENMBYTES)
|
|
||||||
var zero = new Uint8Array(16)
|
|
||||||
xsalsa20.core_hsalsa20(k, zero, s, xsalsa20.SIGMA)
|
|
||||||
|
|
||||||
return crypto_secretbox_open_easy(m, c.subarray(epk.length), n, k)
|
|
||||||
}
|
|
||||||
|
|
||||||
crypto_box_PUBLICKEYBYTES = 32,
|
|
||||||
crypto_box_SECRETKEYBYTES = 32,
|
|
||||||
crypto_box_BEFORENMBYTES = 32,
|
|
||||||
crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
|
|
||||||
crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
|
|
||||||
crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
|
|
||||||
crypto_box_SEALBYTES = 48,
|
|
||||||
crypto_box_BEFORENMBYTES = 32,
|
|
||||||
sodium.memzero = function (len, offset) {
|
sodium.memzero = function (len, offset) {
|
||||||
for (var i = offset; i < len; i++) arr[i] = 0;
|
for (var i = offset; i < len; i++) arr[i] = 0;
|
||||||
}
|
}
|
||||||
@ -88,14 +26,6 @@ forward(require('./crypto_stream'))
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
sodium.crypto_box_PUBLICKEYBYTES = crypto_box_PUBLICKEYBYTES
|
|
||||||
sodium.crypto_box_SECRETKEYBYTES = crypto_box_SECRETKEYBYTES
|
|
||||||
sodium.crypto_box_SEALBYTES = crypto_box_SEALBYTES
|
|
||||||
sodium.crypto_box_BEFORENMBYTES = crypto_box_BEFORENMBYTES
|
|
||||||
sodium.crypto_box_keypair = crypto_box_keypair
|
|
||||||
sodium.crypto_box_seal = crypto_box_seal
|
|
||||||
sodium.crypto_box_seal_open = crypto_box_seal_open
|
|
||||||
|
|
||||||
sodium.sodium_malloc = function (n) {
|
sodium.sodium_malloc = function (n) {
|
||||||
return new Uint8Array(n)
|
return new Uint8Array(n)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user