latest working state
This commit is contained in:
parent
65639e537e
commit
3753006318
@ -1,4 +1,4 @@
|
|||||||
const sha512 = require('sha512-wasm')
|
const sha512 = require('sha512-universal')
|
||||||
const assert = require('nanoassert')
|
const assert = require('nanoassert')
|
||||||
|
|
||||||
if (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')
|
if (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const sha256 = require('sha256-wasm')
|
const sha256 = require('sha256-universal')
|
||||||
const assert = require('nanoassert')
|
const assert = require('nanoassert')
|
||||||
|
|
||||||
if (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')
|
if (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')
|
||||||
|
85
fe-test.js
85
fe-test.js
@ -1,5 +1,32 @@
|
|||||||
const ec = require('./fe25519_25.js')
|
const ec = require('./fe25519_25.js')
|
||||||
const sodium = require('./')
|
const sodium = require('./')
|
||||||
|
const wasm = require('./fe25519_25/fe25519_invert')({
|
||||||
|
imports: {
|
||||||
|
debug: {
|
||||||
|
log (...args) {
|
||||||
|
console.log(...args.map(int => (int >>> 0).toString(16).padStart(8, '0')))
|
||||||
|
},
|
||||||
|
log_tee (arg) {
|
||||||
|
console.log((arg >>> 0).toString(16).padStart(8, '0'))
|
||||||
|
return arg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const wasm2 = require('./fe25519_25/fe25519_pow22523')({
|
||||||
|
imports: {
|
||||||
|
debug: {
|
||||||
|
log (...args) {
|
||||||
|
console.log(...args.map(int => (int >>> 0).toString(16).padStart(8, '0')))
|
||||||
|
},
|
||||||
|
log_tee (arg) {
|
||||||
|
console.log((arg >>> 0).toString(16).padStart(8, '0'))
|
||||||
|
return arg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// const crypto = require('crypto')
|
// const crypto = require('crypto')
|
||||||
|
|
||||||
var f = new Int32Array(10)
|
var f = new Int32Array(10)
|
||||||
@ -9,6 +36,30 @@ var h = new Int32Array(10)
|
|||||||
var a = ec.ge3()
|
var a = ec.ge3()
|
||||||
var r = ec.ge3()
|
var r = ec.ge3()
|
||||||
|
|
||||||
|
function wasm_inv (h, f) {
|
||||||
|
var buf = Buffer.from(f.buffer)
|
||||||
|
|
||||||
|
wasm.memory.set(buf)
|
||||||
|
wasm.exports.fe25519_invert(40, 0)
|
||||||
|
|
||||||
|
buf = Buffer.from(wasm.memory.slice(40, 80))
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
h[i] = buf.readUInt32LE(4 * i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function wasm_pow (h, f) {
|
||||||
|
var buf = Buffer.from(f.buffer)
|
||||||
|
|
||||||
|
wasm2.memory.set(buf)
|
||||||
|
wasm2.exports.fe25519_pow22523(40, 0)
|
||||||
|
|
||||||
|
buf = Buffer.from(wasm2.memory.slice(40, 80))
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
h[i] = buf.readUInt32LE(4 * i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
f[0] = 23983080
|
f[0] = 23983080
|
||||||
a[2][0] = 1
|
a[2][0] = 1
|
||||||
|
|
||||||
@ -102,33 +153,31 @@ const gf = ec.ge3()
|
|||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
ec.fe25519_frombytes(a, an)
|
ec.fe25519_frombytes(a, an)
|
||||||
ec.fe25519_frombytes(b, bn)
|
ec.fe25519_frombytes(b, bn)
|
||||||
|
|
||||||
|
ec.fe25519_mul(c, b, a)
|
||||||
// // console.log('\na __________')
|
// // console.log('\na __________')
|
||||||
// // for (let i = 0; i < 10; i++) console.log(`a${i}:`, signedInt(a[i]).toString(16).padStart(8, '0'))
|
// // for (let i = 0; i < 10; i++) console.log(`a${i}:`, signedInt(a[i]).toString(16).padStart(8, '0'))
|
||||||
// // console.log('\nb __________')
|
// // console.log('\nb __________')
|
||||||
// // for (let i = 0; i < 10; i++) console.log(`b${i}:`, signedInt(b[i]).toString(16).padStart(8, '0'))
|
// // for (let i = 0; i < 10; i++) console.log(`b${i}:`, signedInt(b[i]).toString(16).padStart(8, '0'))
|
||||||
// ec.fe25519_frombytes(c, bn)
|
// ec.fe25519_frombytes(c, bn)
|
||||||
// ec.fe25519_tobytes(res, c)
|
ec.fe25519_tobytes(res, c)
|
||||||
// console.log('tess :', res.toString('hex'))
|
console.log('tess :', res.toString('hex'))
|
||||||
|
|
||||||
ec.fe25519_mul(g, a, b)
|
|
||||||
ec.fe25519_tobytes(res, g)
|
|
||||||
console.log('fe_mul:', res.toString('hex'))
|
|
||||||
|
|
||||||
// ec.fe25519_sq(g, a)
|
console.time('standard')
|
||||||
// ec.fe25519_tobytes(res, g)
|
for (let i = 0; i < 10000; i++) ec.fe25519_pow22523(b, a)
|
||||||
// console.log('fe_sq :', res.toString('hex'))
|
console.timeEnd('standard')
|
||||||
|
|
||||||
// ec.fe25519_reduce(g, c)
|
ec.fe25519_tobytes(res, b)
|
||||||
// ec.fe25519_tobytes(res, g)
|
console.log('tess :', res.toString('hex'))
|
||||||
// console.log('fe_red:', res.toString('hex'))
|
|
||||||
|
|
||||||
// ec.fe25519_sqmul(a, 8734, b)
|
console.log(wasm.buffer.length)
|
||||||
// ec.fe25519_tobytes(res, a)
|
|
||||||
// console.log('fe_sqm:', res.toString('hex'))
|
|
||||||
|
|
||||||
// ec.fe25519_invert(a, a)
|
console.time('pure wasm')
|
||||||
// ec.fe25519_tobytes(res, a)
|
for (let i = 0; i < 10000; i++) wasm_pow(b, a)
|
||||||
// console.log('fe_inv:', res.toString('hex'))
|
console.timeEnd('pure wasm')
|
||||||
|
ec.fe25519_tobytes(res, b)
|
||||||
|
console.log('tess :', res.toString('hex'))
|
||||||
|
|
||||||
// ec.fe25519_pow22523(a, a)
|
// ec.fe25519_pow22523(a, a)
|
||||||
// ec.fe25519_tobytes(res, a)
|
// ec.fe25519_tobytes(res, a)
|
||||||
@ -180,7 +229,7 @@ console.log('fe_mul:', res.toString('hex'))
|
|||||||
// ec.ge25519_p3_tobytes(res, gf)
|
// ec.ge25519_p3_tobytes(res, gf)
|
||||||
// console.log("smdbl :", res.toString('hex'))
|
// console.log("smdbl :", res.toString('hex'))
|
||||||
|
|
||||||
console.log('canon :', ec.sc25519_is_canonical(bn))
|
// console.log('canon :', ec.sc25519_is_canonical(bn))
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -14,6 +14,58 @@ const wasm = require('./fe25519_25/mult.js')({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const wasm3 = require('./fe25519_25/fe25519_invert')({
|
||||||
|
imports: {
|
||||||
|
debug: {
|
||||||
|
log (...args) {
|
||||||
|
console.log(...args.map(int => (int >>> 0).toString(16).padStart(8, '0')))
|
||||||
|
},
|
||||||
|
log_tee (arg) {
|
||||||
|
console.log((arg >>> 0).toString(16).padStart(8, '0'))
|
||||||
|
return arg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const wasm2 = require('./fe25519_25/fe25519_pow22523')({
|
||||||
|
imports: {
|
||||||
|
debug: {
|
||||||
|
log (...args) {
|
||||||
|
console.log(...args.map(int => (int >>> 0).toString(16).padStart(8, '0')))
|
||||||
|
},
|
||||||
|
log_tee (arg) {
|
||||||
|
console.log((arg >>> 0).toString(16).padStart(8, '0'))
|
||||||
|
return arg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
function fe25519_invert (h, f) {
|
||||||
|
var buf = Buffer.from(f.buffer)
|
||||||
|
|
||||||
|
wasm3.memory.set(buf)
|
||||||
|
wasm3.exports.fe25519_invert(40, 0)
|
||||||
|
|
||||||
|
buf = Buffer.from(wasm3.memory.slice(40, 80))
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
h[i] = buf.readUInt32LE(4 * i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fe25519_pow22523 (h, f) {
|
||||||
|
var buf = Buffer.from(f.buffer)
|
||||||
|
|
||||||
|
wasm2.memory.set(buf)
|
||||||
|
wasm2.exports.fe25519_pow22523(40, 0)
|
||||||
|
|
||||||
|
buf = Buffer.from(wasm2.memory.slice(40, 80))
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
h[i] = buf.readUInt32LE(4 * i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
console.log(wasm.buffer.byteLength)
|
console.log(wasm.buffer.byteLength)
|
||||||
const base = require('./fe25519_25/base.json').map(a => a.map(b => ge2(b)))
|
const base = require('./fe25519_25/base.json').map(a => a.map(b => ge2(b)))
|
||||||
const printbuf =Buffer.alloc(32)
|
const printbuf =Buffer.alloc(32)
|
||||||
@ -42,11 +94,10 @@ module.exports = {
|
|||||||
fe25519_sq,
|
fe25519_sq,
|
||||||
fe25519_sqmul,
|
fe25519_sqmul,
|
||||||
fe25519_sq2,
|
fe25519_sq2,
|
||||||
fe25519_invert,
|
fe25519_invert: fe25519_invert,
|
||||||
fe25519_pow22523,
|
fe25519_pow22523: fe25519_pow22523,
|
||||||
fe25519_unchecked_sqrt,
|
fe25519_unchecked_sqrt,
|
||||||
fe25519_sqrt,
|
fe25519_sqrt,
|
||||||
ge25519_add,
|
|
||||||
ge25519_has_small_order,
|
ge25519_has_small_order,
|
||||||
ge25519_frombytes,
|
ge25519_frombytes,
|
||||||
ge25519_tobytes,
|
ge25519_tobytes,
|
||||||
@ -309,7 +360,6 @@ function fe25519_frombytes (h, s) {
|
|||||||
var carry8
|
var carry8
|
||||||
var carry9
|
var carry9
|
||||||
|
|
||||||
|
|
||||||
carry9 = (h9_ + (1 << 8)) >> 9
|
carry9 = (h9_ + (1 << 8)) >> 9
|
||||||
h9_ -= carry9 * (1 << 9)
|
h9_ -= carry9 * (1 << 9)
|
||||||
h0 += carry9 * 19
|
h0 += carry9 * 19
|
||||||
@ -345,7 +395,6 @@ function fe25519_frombytes (h, s) {
|
|||||||
h8_ += carry7
|
h8_ += carry7
|
||||||
h8 -= carry7 * (1 << 16)
|
h8 -= carry7 * (1 << 16)
|
||||||
|
|
||||||
|
|
||||||
carry0 = (h0_ + (1 << 9)) >>> 10
|
carry0 = (h0_ + (1 << 9)) >>> 10
|
||||||
h0_ -= carry0 * (1 << 10)
|
h0_ -= carry0 * (1 << 10)
|
||||||
h1 += carry0
|
h1 += carry0
|
||||||
@ -727,7 +776,7 @@ function fe25519_mul (h, f, g) {
|
|||||||
|
|
||||||
wasm.memory.set(fbuf)
|
wasm.memory.set(fbuf)
|
||||||
wasm.memory.set(gbuf, 40)
|
wasm.memory.set(gbuf, 40)
|
||||||
wasm.exports.fe255219_mul(0, 40)
|
wasm.exports.fe25519_mul(80, 0, 40)
|
||||||
|
|
||||||
buf = Buffer.from(wasm.memory.slice(80, 120))
|
buf = Buffer.from(wasm.memory.slice(80, 120))
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
@ -753,7 +802,7 @@ function fe25519_sq (h, f, log) {
|
|||||||
var buf = Buffer.from(f.buffer)
|
var buf = Buffer.from(f.buffer)
|
||||||
|
|
||||||
wasm.memory.set(buf)
|
wasm.memory.set(buf)
|
||||||
wasm.exports.sq(40, 0, 0)
|
wasm.exports.fe25519_sq(40, 0, 0)
|
||||||
|
|
||||||
buf = Buffer.from(wasm.memory.slice(40, 80))
|
buf = Buffer.from(wasm.memory.slice(40, 80))
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
@ -779,7 +828,7 @@ function fe25519_sq2 (h, f) {
|
|||||||
var buf = Buffer.from(f.buffer)
|
var buf = Buffer.from(f.buffer)
|
||||||
|
|
||||||
wasm.memory.set(buf)
|
wasm.memory.set(buf)
|
||||||
wasm.exports.sq(40, 0, 1)
|
wasm.exports.fe25519_sq(40, 0, 1)
|
||||||
|
|
||||||
buf = Buffer.from(wasm.memory.slice(40, 80))
|
buf = Buffer.from(wasm.memory.slice(40, 80))
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
@ -802,7 +851,7 @@ function fe25519_sqmul (s, n, a) {
|
|||||||
* Inversion - returns 0 if z=0
|
* Inversion - returns 0 if z=0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function fe25519_invert (out, z) {
|
function fe25519_invert_1 (out, z) {
|
||||||
check_fe(out)
|
check_fe(out)
|
||||||
check_fe(z)
|
check_fe(z)
|
||||||
|
|
||||||
@ -862,7 +911,7 @@ function fe25519_invert (out, z) {
|
|||||||
Power 2^252 - 3 mod 2^255 - 19
|
Power 2^252 - 3 mod 2^255 - 19
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function fe25519_pow22523 (out, z) {
|
function fe25519_pow22523_1 (out, z) {
|
||||||
check_fe(out)
|
check_fe(out)
|
||||||
check_fe(z)
|
check_fe(z)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user