sodium-javascript/crypto_core_ristretto255.js
2021-11-19 21:43:58 -08:00

92 lines
3.4 KiB
JavaScript

const ristretto255 = require('ristretto255')
const crypto_core_ristretto255_BYTES = 32
const crypto_core_ristretto255_HASHBYTES = 64
const crypto_core_ristretto255_SCALARBYTES = 32
const crypto_core_ristretto255_NONREDUCEDSCALARBYTES = 64
module.exports = {
crypto_core_ristretto255_BYTES,
crypto_core_ristretto255_HASHBYTES,
crypto_core_ristretto255_SCALARBYTES,
crypto_core_ristretto255_NONREDUCEDSCALARBYTES,
crypto_core_ristretto255_is_valid_point,
crypto_core_ristretto255_add,
crypto_core_ristretto255_sub,
crypto_core_ristretto255_from_hash,
crypto_core_ristretto255_random,
crypto_core_ristretto255_scalar_random,
crypto_core_ristretto255_scalar_invert,
crypto_core_ristretto255_scalar_negate,
crypto_core_ristretto255_scalar_add,
crypto_core_ristretto255_scalar_sub,
crypto_core_ristretto255_scalar_mul
}
function crypto_core_ristretto255_is_valid_point (p) {
check(p, crypto_core_ristretto255_BYTES)
return ristretto255.isValid(p)
}
function crypto_core_ristretto255_add (r, p, q) {
check(r, crypto_core_ristretto255_BYTES)
check(p, crypto_core_ristretto255_BYTES)
check(q, crypto_core_ristretto255_BYTES)
return r.set(ristretto255.add(p, q))
}
function crypto_core_ristretto255_sub (r, p, q) {
check(r, crypto_core_ristretto255_BYTES)
check(p, crypto_core_ristretto255_BYTES)
check(q, crypto_core_ristretto255_BYTES)
return r.set(ristretto255.sub(p, q))
}
function crypto_core_ristretto255_from_hash (p, r) {
check(p, crypto_core_ristretto255_BYTES)
check(r, crypto_core_ristretto255_HASHBYTES)
return p.set(ristretto255.fromHash(r))
}
// crypto_core_ristretto255_from_string () {}
// crypto_core_ristretto255_from_string_ro () {}
function crypto_core_ristretto255_random (p) {
check(p, crypto_core_ristretto255_BYTES)
return p.set(ristretto255.getRandom())
}
function crypto_core_ristretto255_scalar_random (r) {
check(r, crypto_core_ristretto255_SCALARBYTES)
return r.set(ristretto255.scalar.getRandom())
}
function crypto_core_ristretto255_scalar_invert (recip, s) {
check(recip, crypto_core_ristretto255_SCALARBYTES)
check(s, crypto_core_ristretto255_SCALARBYTES)
return recip.set(ristretto255.scalar.invert(s))
}
function crypto_core_ristretto255_scalar_negate (neg, s) {
check(neg, crypto_core_ristretto255_SCALARBYTES)
check(s, crypto_core_ristretto255_SCALARBYTES)
return neg.set(ristretto255.scalar.negate(s))
}
// function crypto_core_ristretto255_scalar_complement (comp, s) {}
function crypto_core_ristretto255_scalar_add (z, x, y) {
check(z, crypto_core_ristretto255_SCALARBYTES)
check(x, crypto_core_ristretto255_SCALARBYTES)
check(y, crypto_core_ristretto255_SCALARBYTES)
return z.set(ristretto255.scalar.add(x, y))
}
function crypto_core_ristretto255_scalar_sub (z, x, y) {
check(z, crypto_core_ristretto255_SCALARBYTES)
check(x, crypto_core_ristretto255_SCALARBYTES)
check(y, crypto_core_ristretto255_SCALARBYTES)
return z.set(ristretto255.scalar.sub(x, y))
}
function crypto_core_ristretto255_scalar_mul (z, x, y) {
check(z, crypto_core_ristretto255_SCALARBYTES)
check(x, crypto_core_ristretto255_SCALARBYTES)
check(y, crypto_core_ristretto255_SCALARBYTES)
return z.set(ristretto255.scalar.mul(x, y))
}
// function crypto_core_ristretto255_scalar_reduce (r, s) {}
// function crypto_core_ristretto255_scalar_is_canonical (s) {}
function check (buf, len) {
if (!buf || (len && buf.length < len)) throw new Error('Argument must be a buffer' + (len ? ' of length ' + len : ''))
}