ristretto255

This commit is contained in:
Luke Burns 2021-11-19 21:43:58 -08:00
parent 426ca77d47
commit 0ace3a058a
4 changed files with 123 additions and 1 deletions

View File

@ -0,0 +1,91 @@
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 : ''))
}

View File

@ -1,4 +1,6 @@
/* eslint-disable camelcase, one-var */
const ristretto255 = require('ristretto255')
const { crypto_core_ristretto255_BYTES, crypto_core_ristretto255_SCALARBYTES } = require('./crypto_core_ristretto255')
const { _9, _121665, gf, inv25519, pack25519, unpack25519, sel25519, A, M, Z, S } = require('./internal/ed25519')
const crypto_scalarmult_BYTES = 32
@ -8,7 +10,34 @@ module.exports = {
crypto_scalarmult,
crypto_scalarmult_base,
crypto_scalarmult_BYTES,
crypto_scalarmult_SCALARBYTES
crypto_scalarmult_SCALARBYTES,
crypto_scalarmult_ristretto255,
crypto_scalarmult_ristretto255_base,
crypto_scalarmult_ristretto255_bytes,
crypto_scalarmult_ristretto255_scalarbytes,
crypto_scalarmult_ristretto255_BYTES: crypto_core_ristretto255_BYTES,
crypto_scalarmult_ristretto255_SCALARBYTES: crypto_core_ristretto255_SCALARBYTES
}
function crypto_scalarmult_ristretto255 (q, n, p) {
check(q, crypto_core_ristretto255_BYTES)
check(n, crypto_core_ristretto255_SCALARBYTES)
check(p, crypto_core_ristretto255_BYTES)
return q.set(ristretto255.scalarMult(n, p))
}
function crypto_scalarmult_ristretto255_base (q, n) {
check(q, crypto_core_ristretto255_BYTES)
check(n, crypto_core_ristretto255_SCALARBYTES)
return q.set(ristretto255.scalarMultBase(n))
}
function crypto_scalarmult_ristretto255_bytes () {
return crypto_scalarmult_ristretto255_BYTES
}
function crypto_scalarmult_ristretto255_scalarbytes () {
return crypto_scalarmult_ristretto255_SCALARBYTES
}
function crypto_scalarmult (q, n, p) {

View File

@ -21,6 +21,7 @@ forward(require('./crypto_kdf'))
forward(require('./crypto_kx'))
forward(require('./crypto_aead'))
forward(require('./crypto_onetimeauth'))
forward(require('./crypto_core_ristretto255'))
forward(require('./crypto_scalarmult'))
forward(require('./crypto_secretbox'))
forward(require('./crypto_shorthash'))

View File

@ -7,6 +7,7 @@
"blake2b": "^2.1.1",
"chacha20-universal": "^1.0.4",
"nanoassert": "^2.0.0",
"ristretto255": "^0.1.2",
"sha256-universal": "^1.1.0",
"sha512-universal": "^1.1.0",
"siphash24": "^1.0.1",