2020-06-26 08:16:35 +00:00
|
|
|
const sodium = require('./')
|
2020-10-17 20:42:56 +00:00
|
|
|
const native = require('sodium-native')
|
2020-10-15 23:10:52 +00:00
|
|
|
const { crypto_scalarmult_ed25519, crypto_scalarmult_ed25519_base, crypto_scalarmult_curve25519, crypto_scalarmult_curve25519_1, crypto_scalarmult_curve25519_base } = require('./crypto_scalarmult_ed25519')
|
2020-10-30 09:45:51 +00:00
|
|
|
const { crypto_sign, crypto_sign_open, crypto_sign_verify_detached } = require('./crypto_sign_ed25519')
|
2020-10-17 20:42:56 +00:00
|
|
|
const sign = require('./crypto_sign')
|
|
|
|
const ed = require('./ed25519')
|
2020-10-30 09:45:51 +00:00
|
|
|
const ec = require('./fe25519_25')
|
2020-06-26 08:16:35 +00:00
|
|
|
|
|
|
|
console.log(crypto_scalarmult_ed25519)
|
|
|
|
let sm = Buffer.alloc(1024 + sodium.crypto_sign_BYTES)
|
|
|
|
let sm1 = Buffer.alloc(1024 + sodium.crypto_sign_BYTES)
|
|
|
|
let skpk = Buffer.alloc(sodium.crypto_sign_SECRETKEYBYTES)
|
|
|
|
let pk = Buffer.alloc(sodium.crypto_sign_PUBLICKEYBYTES)
|
|
|
|
let sk = Buffer.alloc(sodium.crypto_sign_SECRETKEYBYTES)
|
|
|
|
let smlen
|
|
|
|
let smlen1
|
|
|
|
let i
|
|
|
|
let test
|
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// sig.fill(0)
|
2020-06-26 08:16:35 +00:00
|
|
|
|
|
|
|
var an = Buffer.from([
|
2020-10-17 20:42:56 +00:00
|
|
|
0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, 0x3c, 0x16, 0xc1,
|
|
|
|
0x72, 0x51, 0xb2, 0x66, 0x45, 0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0,
|
|
|
|
0x99, 0x2a, 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a
|
2020-06-26 08:16:35 +00:00
|
|
|
])
|
|
|
|
|
|
|
|
var bn = Buffer.from([
|
2020-10-17 20:42:56 +00:00
|
|
|
0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b, 0x79, 0xe1, 0x7f,
|
|
|
|
0x8b, 0x83, 0x80, 0x0e, 0xe6, 0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18,
|
|
|
|
0xb6, 0xfd, 0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb
|
2020-06-26 08:16:35 +00:00
|
|
|
])
|
|
|
|
|
2020-10-17 20:42:56 +00:00
|
|
|
var bobpk = Buffer.from('de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f', 'hex')
|
|
|
|
|
2020-06-26 08:16:35 +00:00
|
|
|
var cn = Buffer.from([
|
|
|
|
190, 24, 150, 125, 14, 254, 19, 44,
|
|
|
|
55, 112, 156, 5, 141, 230, 91, 84,
|
|
|
|
110, 130, 213, 39, 249, 107, 145, 140,
|
|
|
|
226, 38, 16, 80, 186, 183, 134, 239
|
|
|
|
])
|
|
|
|
|
|
|
|
const res = Buffer.alloc(32)
|
|
|
|
|
|
|
|
var fixtures = require('./crypto_sign.json').map(a => parseTest(a))
|
|
|
|
var pass = true
|
|
|
|
|
|
|
|
// test = parseTest(fixture)
|
|
|
|
|
|
|
|
// console.time('hello')
|
|
|
|
// for (let test of fixtures) {
|
|
|
|
// skpk.set(test.sk)
|
|
|
|
// skpk.set(test.pk, sodium.crypto_sign_SEEDBYTES)
|
|
|
|
// smlen = sodium.crypto_sign(sm, test.m, skpk)
|
|
|
|
// sodium.crypto_sign_open(test.m, sm.subarray(0, smlen), test.pk)
|
|
|
|
// }
|
|
|
|
// console.timeEnd('hello')
|
|
|
|
|
|
|
|
// console.time('ed')
|
|
|
|
// for (let test of fixtures) {
|
|
|
|
// skpk.set(test.sk)
|
|
|
|
// skpk.set(test.pk, sodium.crypto_sign_SEEDBYTES)
|
|
|
|
// smlen = crypto_sign(sm, test.m, skpk)
|
|
|
|
// crypto_sign_open(test.m, sm.subarray(0, smlen), test.pk)
|
|
|
|
// }
|
|
|
|
// console.timeEnd('ed')
|
|
|
|
|
|
|
|
// for (let i = 0; i < fixtures.length; i++) {
|
|
|
|
// let pass = true
|
|
|
|
|
|
|
|
// sm.fill(0)
|
|
|
|
// sm1.fill(0)
|
|
|
|
// test = fixtures[i]
|
|
|
|
// skpk.set(test.sk)
|
|
|
|
// skpk.set(test.pk, sodium.crypto_sign_SEEDBYTES)
|
|
|
|
// smlen = sodium.crypto_sign(sm, test.m, skpk)
|
|
|
|
// smlen1 = crypto_sign(sm1, test.m, skpk)
|
|
|
|
|
|
|
|
// pass &= sodium.crypto_sign_open(test.m, sm1.subarray(0, smlen1), test.pk)
|
|
|
|
// pass &= crypto_sign_open(test.m, sm.subarray(0, smlen), test.pk)
|
|
|
|
|
|
|
|
// if (Buffer.compare(sm, sm1) !== 0 || !pass) console.log('test fails at fixture #' + i)
|
|
|
|
// }
|
|
|
|
|
2020-10-17 20:42:56 +00:00
|
|
|
// //////////////////////////////
|
|
|
|
// sodium.crypto_scalarmult(res, an, bn)
|
|
|
|
// console.log(res.toString('hex'))
|
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
function main () {
|
|
|
|
const b = 3;
|
|
|
|
const pos = 21;
|
|
|
|
const p = ec.ge2();
|
|
|
|
const res = Buffer.alloc(32)
|
|
|
|
// static char hex[32];
|
|
|
|
|
|
|
|
// printf("hello\n");
|
|
|
|
ec.ge25519_cmov8_base(p, pos, b);
|
|
|
|
// printf("hello\n");
|
|
|
|
ec.ge25519_tobytes(res, p);
|
|
|
|
|
|
|
|
console.log(res.toString('hex'))
|
|
|
|
}
|
|
|
|
console.log('====================')
|
|
|
|
main()
|
|
|
|
console.log('====================')
|
|
|
|
|
|
|
|
/////////////////////////////////////////
|
|
|
|
|
2020-10-17 20:42:56 +00:00
|
|
|
res.fill(0)
|
|
|
|
crypto_scalarmult_curve25519(res, an, bobpk)
|
2020-06-26 08:16:35 +00:00
|
|
|
console.log(res.toString('hex'))
|
|
|
|
|
2020-10-17 20:42:56 +00:00
|
|
|
// console.time('whole')
|
|
|
|
crypto_scalarmult_curve25519_1(res, an, bobpk)
|
|
|
|
// console.timeEnd('whole')
|
2020-10-30 09:45:51 +00:00
|
|
|
console.log('scmult wasm', res.toString('hex'))
|
2020-06-26 08:16:35 +00:00
|
|
|
|
2020-10-17 20:42:56 +00:00
|
|
|
native.crypto_scalarmult(res, an, bobpk)
|
2020-10-30 09:45:51 +00:00
|
|
|
console.log('scmult nati', res.toString('hex'))
|
|
|
|
|
|
|
|
sodium.crypto_scalarmult(res, an, bobpk)
|
|
|
|
console.log('scmult js ', res.toString('hex'))
|
2020-06-26 08:16:35 +00:00
|
|
|
|
|
|
|
sodium.crypto_scalarmult_base(res, an)
|
2020-10-30 09:45:51 +00:00
|
|
|
console.log('scmultb js', res.toString('hex'))
|
|
|
|
|
|
|
|
// const basepoint = Buffer.alloc(32)
|
|
|
|
// res.fill(0)
|
|
|
|
// native.crypto_scalarmult_base(basepoint, res)
|
|
|
|
// console.log('---------------', basepoint.toString('hex'))
|
2020-06-26 08:16:35 +00:00
|
|
|
|
2020-10-17 20:42:56 +00:00
|
|
|
native.crypto_scalarmult_base(res, an)
|
2020-10-30 09:45:51 +00:00
|
|
|
console.log('scmultb nat', res.toString('hex'))
|
2020-10-17 20:42:56 +00:00
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// res.fill(0)
|
|
|
|
// const p = ec.ge3()
|
|
|
|
// ec.ge25519_scalarmult_base(p, an)
|
|
|
|
// ec.ge25519_tobytes(res, p)
|
2020-10-17 20:42:56 +00:00
|
|
|
crypto_scalarmult_curve25519_base(res, an)
|
2020-10-30 09:45:51 +00:00
|
|
|
console.log('scmultb was', res.toString('hex'))
|
2020-10-17 20:42:56 +00:00
|
|
|
|
|
|
|
native.crypto_scalarmult(res, fixtures[1].sk, fixtures[1].pk)
|
|
|
|
console.log(res.toString('hex'))
|
|
|
|
|
|
|
|
crypto_scalarmult_curve25519(res, fixtures[1].sk, fixtures[1].pk)
|
|
|
|
console.log('wasm naive', res.toString('hex'))
|
|
|
|
|
|
|
|
crypto_scalarmult_curve25519_1(res, fixtures[1].sk, fixtures[1].pk)
|
|
|
|
console.log('wasm inner loop', res.toString('hex'))
|
|
|
|
|
|
|
|
native.crypto_scalarmult(res, fixtures[1].sk, fixtures[1].pk)
|
|
|
|
console.log('native', res.toString('hex'))
|
|
|
|
|
|
|
|
crypto_scalarmult_ed25519(res, fixtures[1].sk, fixtures[1].pk)
|
|
|
|
console.log(res.toString('hex'))
|
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// const a = Buffer.alloc(32)
|
|
|
|
// a[i] = 9
|
|
|
|
// crypto_scalarmult_curve25519_base(res, an)
|
|
|
|
// console.log(res.toString('hex'))
|
2020-06-26 08:16:35 +00:00
|
|
|
|
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// console.time('hello')
|
|
|
|
// for (let test of fixtures) {
|
|
|
|
// sodium.crypto_scalarmult(res, test.sk, test.pk)
|
|
|
|
// }
|
|
|
|
// console.timeEnd('hello')
|
|
|
|
// console.log(res.toString('hex'))
|
2020-06-26 08:16:35 +00:00
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// const res1 = Buffer.from(res)
|
|
|
|
// console.time('ed')
|
|
|
|
// for (let test of fixtures) {
|
|
|
|
// crypto_scalarmult_curve25519(res, test.sk, test.pk)
|
|
|
|
// }
|
|
|
|
// console.timeEnd('ed')
|
2020-06-26 08:16:35 +00:00
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// console.time('wasm')
|
|
|
|
// for (let test of fixtures) {
|
|
|
|
// crypto_scalarmult_curve25519_1(res1, test.sk, test.pk)
|
|
|
|
// }
|
|
|
|
// console.timeEnd('wasm')
|
2020-10-15 23:10:52 +00:00
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// console.time('native')
|
|
|
|
// for (let test of fixtures) {
|
|
|
|
// native.crypto_scalarmult(res1, test.sk, test.pk)
|
|
|
|
// }
|
|
|
|
// console.timeEnd('native')
|
|
|
|
// console.log(res.toString('hex'))
|
|
|
|
// console.log(res1.toString('hex'))
|
|
|
|
|
|
|
|
/////////////////////////////////////////
|
2020-10-15 23:10:52 +00:00
|
|
|
|
2020-06-26 08:16:35 +00:00
|
|
|
// console.log(sm.toString('hex'))
|
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
native.crypto_sign_keypair(pk, sk)
|
|
|
|
|
|
|
|
let sig = Buffer.alloc(sodium.crypto_sign_BYTES + 32)
|
|
|
|
const m = Buffer.alloc(32)
|
|
|
|
const m2 = Buffer.alloc(32)
|
|
|
|
for (let i = 0; i < 32; i++) m[i] = i
|
|
|
|
|
|
|
|
crypto_sign(sig, m, sk)
|
2020-06-26 08:16:35 +00:00
|
|
|
// pass &= smlen === sodium.crypto_sign_BYTES + test.m.byteLength
|
|
|
|
// pass &= Buffer.compare(test.sig, sm.subarray(0, 64)) === 0
|
|
|
|
// pass &= sodium.crypto_sign_open(test.m, sm.subarray(0, smlen), test.pk)
|
2020-10-30 09:45:51 +00:00
|
|
|
console.log('sig', sig.toString('hex'))
|
2020-06-26 08:16:35 +00:00
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
console.log(sodium.crypto_sign_open(m2, sig, pk))
|
|
|
|
console.log(crypto_sign_open(m2, sig, pk))
|
|
|
|
console.log(m2.toString('hex'))
|
2020-06-26 08:16:35 +00:00
|
|
|
|
2020-10-30 09:45:51 +00:00
|
|
|
// // pass &= sig.byteLength !== 0 && sig.byteLength <= sodium.crypto_sign_BYTES
|
|
|
|
// // pass &= Buffer.compare(test.sig, sig) === 0
|
2020-06-26 08:16:35 +00:00
|
|
|
// pass &= sodium.crypto_sign_verify_detached(sig, test.m.subarray(0, i), test.pk)
|
|
|
|
|
|
|
|
function parseTest (t) {
|
|
|
|
return {
|
|
|
|
sk: Buffer.from(t[0]),
|
|
|
|
pk: Buffer.from(t[1]),
|
|
|
|
sig: Buffer.from(t[2]),
|
|
|
|
m: Buffer.from(t[3])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00720
|