34 lines
1.2 KiB
JavaScript
34 lines
1.2 KiB
JavaScript
|
const { crypto_scalarmult_base } = require('./crypto_scalarmult')
|
||
|
const { crypto_generichash } = require('./crypto_generichash')
|
||
|
const { randombytes_buf } = require('./randombytes')
|
||
|
const assert = require('nanoassert')
|
||
|
|
||
|
var crypto_kx_SEEDBYTES = 32
|
||
|
var crypto_kx_PUBLICKEYBYTES = 32
|
||
|
var crypto_kx_SECRETKEYBYTES = 32
|
||
|
|
||
|
function crypto_kx_keypair (pk, sk) {
|
||
|
assert(pk.byteLength === crypto_kx_PUBLICKEYBYTES, "pk must be 'crypto_kx_PUBLICKEYBYTES' bytes")
|
||
|
assert(sk.byteLength === crypto_kx_SECRETKEYBYTES, "sk must be 'crypto_kx_SECRETKEYBYTES' bytes")
|
||
|
|
||
|
randombytes_buf(sk, crypto_kx_SECRETKEYBYTES)
|
||
|
return crypto_scalarmult_base(pk, sk)
|
||
|
}
|
||
|
|
||
|
function crypto_kx_seed_keypair (pk, sk, seed) {
|
||
|
assert(pk.byteLength === crypto_kx_PUBLICKEYBYTES, "pk must be 'crypto_kx_PUBLICKEYBYTES' bytes")
|
||
|
assert(sk.byteLength === crypto_kx_SECRETKEYBYTES, "sk must be 'crypto_kx_SECRETKEYBYTES' bytes")
|
||
|
assert(seed.byteLength === crypto_kx_SEEDBYTES, "seed must be 'crypto_kx_SEEDBYTES' bytes")
|
||
|
|
||
|
crypto_generichash(sk, seed)
|
||
|
return crypto_scalarmult_base(pk, sk)
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
crypto_kx_keypair,
|
||
|
crypto_kx_seed_keypair,
|
||
|
crypto_kx_SEEDBYTES,
|
||
|
crypto_kx_SECRETKEYBYTES,
|
||
|
crypto_kx_PUBLICKEYBYTES
|
||
|
}
|