92 lines
3.4 KiB
JavaScript
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 : ''))
|
|
}
|