aboutsummaryrefslogtreecommitdiffstats
path: root/docs/demo/bls.js
diff options
context:
space:
mode:
Diffstat (limited to 'docs/demo/bls.js')
-rw-r--r--docs/demo/bls.js229
1 files changed, 65 insertions, 164 deletions
diff --git a/docs/demo/bls.js b/docs/demo/bls.js
index d341f26..4565b6c 100644
--- a/docs/demo/bls.js
+++ b/docs/demo/bls.js
@@ -6,7 +6,7 @@
generator(exports, crypto, true)
} else {
const crypto = window.crypto || window.msCrypto
- let exports = {}
+ const exports = {}
exports.mod = {}
window.bls = generator(exports, crypto, false)
}
@@ -18,19 +18,12 @@
const MCLBN_FP_UNIT_SIZE = 6
- const MCLBN_FP_SIZE = MCLBN_FP_UNIT_SIZE * 8
- const MCLBN_G1_SIZE = MCLBN_FP_SIZE * 3
- const MCLBN_G2_SIZE = MCLBN_FP_SIZE * 6
- const MCLBN_GT_SIZE = MCLBN_FP_SIZE * 12
-
const BLS_ID_SIZE = MCLBN_FP_UNIT_SIZE * 8
const BLS_SECRETKEY_SIZE = BLS_ID_SIZE
const BLS_PUBLICKEY_SIZE = BLS_ID_SIZE * 3 * 2
const BLS_SIGNATURE_SIZE = BLS_ID_SIZE * 3
- let capi = {}
- exports.capi = capi
- let mod = exports.mod
+ const mod = exports.mod
exports.init = (curveType = MCLBN_CURVE_FP254BNB) => {
console.log('init')
@@ -42,24 +35,10 @@
}
return new Promise((resolve) => {
mod.onRuntimeInitialized = () => {
- const f = (exportedFuncs) => {
- exportedFuncs.forEach(func => {
- capi[func.exportName] = mod.cwrap(func.name, func.returns, func.args)
- })
- define_extra_functions(mod)
- let r = capi.blsInit(curveType)
- console.log('finished ' + r)
- resolve()
- }
- if (isNodeJs) {
- const fs = require('fs')
- const jsonStr = fs.readFileSync('./exported-bls.json')
- f(JSON.parse(jsonStr))
- } else {
- fetch('exported-bls.json')
- .then(response => response.json())
- .then(exportedFuncs => f(exportedFuncs))
- }
+ define_extra_functions(mod)
+ exports.blsInit(curveType)
+ console.log('finished')
+ resolve()
}
})
}
@@ -176,33 +155,6 @@
mod._free(pos)
return s
}
- const wrap_keyShare = function(func, dataSize) {
- return function(x, vec, id) {
- let k = vec.length
- let p = mod._malloc(dataSize * k)
- for (let i = 0; i < k; i++) {
- mod._memcpy(p + i * dataSize, vec[i], dataSize)
- }
- let r = func(x, p, k, id)
- mod._free(p)
- if (r) throw('keyShare ' + k)
- }
- }
- const wrap_recover = function(func, dataSize, idDataSize) {
- return function(x, vec, idVec) {
- let n = vec.length
- let p = mod._malloc(dataSize * n)
- let q = mod._malloc(idDataSize * n)
- for (let i = 0; i < n; i++) {
- mod._memcpy(p + i * dataSize, vec[i], dataSize)
- mod._memcpy(q + i * idDataSize, idVec[i], idDataSize)
- }
- let r = func(x, p, q, n)
- mod._free(q)
- mod._free(p)
- if (r) throw('recover ' + n)
- }
- }
const callShare = function(func, a, size, vec, id) {
let stack = mod.Runtime.stackSave()
let pos = mod.Runtime.stackAlloc(a.length * 4)
@@ -236,90 +188,34 @@
mod.Runtime.stackRestore(stack)
}
const define_extra_functions = function(mod) {
- capi.mclBnFr_malloc = function() {
- return mod._malloc(MCLBN_FP_SIZE)
- }
- capi.mcl_free = function(x) {
- mod._free(x)
- }
- capi.mclBnFr_deserialize = wrap_input(capi._mclBnFr_deserialize, 1)
- capi.mclBnFr_setLittleEndian = wrap_input(capi._mclBnFr_setLittleEndian, 1)
- capi.mclBnFr_setStr = wrap_input(capi._mclBnFr_setStr, 1)
- capi.mclBnFr_getStr = wrap_outputString(capi._mclBnFr_getStr)
- capi.mclBnFr_setHashOf = wrap_input(capi._mclBnFr_setHashOf, 1)
-
- ///////////////////////////////////////////////////////////////
- capi.mclBnG1_malloc = function() {
- return mod._malloc(MCLBN_G1_SIZE)
- }
- capi.mclBnG1_setStr = wrap_input(capi._mclBnG1_setStr, 1)
- capi.mclBnG1_getStr = wrap_outputString(capi._mclBnG1_getStr)
- capi.mclBnG1_deserialize = wrap_input(capi._mclBnG1_deserialize, 1)
- capi.mclBnG1_serialize = wrap_outputArray(capi._mclBnG1_serialize)
- capi.mclBnG1_hashAndMapTo = wrap_input(capi._mclBnG1_hashAndMapTo, 1)
-
- ///////////////////////////////////////////////////////////////
- capi.mclBnG2_malloc = function() {
- return mod._malloc(MCLBN_G2_SIZE)
- }
- capi.mclBnG2_setStr = wrap_input(capi._mclBnG2_setStr, 1)
- capi.mclBnG2_getStr = wrap_outputString(capi._mclBnG2_getStr)
- capi.mclBnG2_deserialize = wrap_input(capi._mclBnG2_deserialize, 1)
- capi.mclBnG2_serialize = wrap_outputArray(capi._mclBnG2_serialize)
- capi.mclBnG2_hashAndMapTo = wrap_input(capi._mclBnG2_hashAndMapTo, 1)
-
- ///////////////////////////////////////////////////////////////
- capi.mclBnGT_malloc = function() {
- return mod._malloc(MCLBN_GT_SIZE)
- }
- capi.mclBnGT_deserialize = wrap_input(capi._mclBnGT_deserialize, 1)
- capi.mclBnGT_serialize = wrap_outputArray(capi._mclBnGT_serialize)
- capi.mclBnGT_setStr = wrap_input(capi._mclBnGT_setStr, 1)
- capi.mclBnGT_getStr = wrap_outputString(capi._mclBnGT_getStr)
- ///////////////////////////////////////////////////////////////
- capi.bls_free = capi.mcl_free
- capi.blsId_malloc = capi.mclBnFr_malloc
- capi.blsSecretKey_malloc = capi.mclBnFr_malloc
- capi.blsPublicKey_malloc = capi.mclBnG2_malloc
- capi.blsSignature_malloc = capi.mclBnG1_malloc
-
- capi.blsInit = function(curveType = MCLBN_CURVE_FP254BNB) {
- return capi._blsInit(curveType, MCLBN_FP_UNIT_SIZE)
+ // change curveType
+ exports.blsInit = function(curveType = MCLBN_CURVE_FP254BNB) {
+ const r = mod._blsInit(curveType, MCLBN_FP_UNIT_SIZE)
+ if (r) throw('blsInit err ' + r)
}
- capi.blsGetCurveOrder = wrap_outputString(capi._blsGetCurveOrder)
- capi.blsGetFieldOrder = wrap_outputString(capi._blsGetFieldOrder)
+ exports.getCurveOrder = wrap_outputString(mod._blsGetCurveOrder)
+ exports.getFieldOrder = wrap_outputString(mod._blsGetFieldOrder)
- capi.blsIdSetDecStr = wrap_input(capi._blsIdSetDecStr, 1)
- capi.blsIdSetHexStr = wrap_input(capi._blsIdSetHexStr, 1)
- capi.blsIdGetDecStr = wrap_outputString(capi._blsIdGetDecStr)
- capi.blsIdGetHexStr = wrap_outputString(capi._blsIdGetHexStr)
+ mod.blsIdSetDecStr = wrap_input(mod._blsIdSetDecStr, 1)
+ mod.blsIdSetHexStr = wrap_input(mod._blsIdSetHexStr, 1)
+ mod.blsIdGetDecStr = wrap_outputString(mod._blsIdGetDecStr)
+ mod.blsIdGetHexStr = wrap_outputString(mod._blsIdGetHexStr)
- capi.blsSecretKeySetDecStr = wrap_input(capi._blsSecretKeySetDecStr, 1)
- capi.blsSecretKeySetHexStr = wrap_input(capi._blsSecretKeySetHexStr, 1)
- capi.blsSecretKeyGetDecStr = wrap_outputString(capi._blsSecretKeyGetDecStr)
- capi.blsSecretKeyGetHexStr = wrap_outputString(capi._blsSecretKeyGetHexStr)
+ mod.blsIdSerialize = wrap_outputArray(mod._blsIdSerialize)
+ mod.blsSecretKeySerialize = wrap_outputArray(mod._blsSecretKeySerialize)
+ mod.blsPublicKeySerialize = wrap_outputArray(mod._blsPublicKeySerialize)
+ mod.blsSignatureSerialize = wrap_outputArray(mod._blsSignatureSerialize)
- capi.blsIdSerialize = wrap_outputArray(capi._blsIdSerialize)
- capi.blsSecretKeySerialize = wrap_outputArray(capi._blsSecretKeySerialize)
- capi.blsPublicKeySerialize = wrap_outputArray(capi._blsPublicKeySerialize)
- capi.blsSignatureSerialize = wrap_outputArray(capi._blsSignatureSerialize)
+ mod.blsIdDeserialize = wrap_input(mod._blsIdDeserialize, 1)
+ mod.blsSecretKeyDeserialize = wrap_input(mod._blsSecretKeyDeserialize, 1)
+ mod.blsPublicKeyDeserialize = wrap_input(mod._blsPublicKeyDeserialize, 1)
+ mod.blsSignatureDeserialize = wrap_input(mod._blsSignatureDeserialize, 1)
- capi.blsIdDeserialize = wrap_input(capi._blsIdDeserialize, 1)
- capi.blsSecretKeyDeserialize = wrap_input(capi._blsSecretKeyDeserialize, 1)
- capi.blsPublicKeyDeserialize = wrap_input(capi._blsPublicKeyDeserialize, 1)
- capi.blsSignatureDeserialize = wrap_input(capi._blsSignatureDeserialize, 1)
-
- capi.blsSecretKeySetLittleEndian = wrap_input(capi._blsSecretKeySetLittleEndian, 1)
- capi.blsHashToSecretKey = wrap_input(capi._blsHashToSecretKey, 1)
- capi.blsSign = wrap_input(capi._blsSign, 2)
- capi.blsVerify = wrap_input(capi._blsVerify, 2, true)
-
- capi.blsSecretKeyShare = wrap_keyShare(capi._blsSecretKeyShare, BLS_SECRETKEY_SIZE)
- capi.blsPublicKeyShare = wrap_keyShare(capi._blsPublicKeyShare, BLS_PUBLICKEY_SIZE)
- capi.blsSecretKeyRecover = wrap_recover(capi._blsSecretKeyRecover, BLS_SECRETKEY_SIZE, BLS_ID_SIZE)
- capi.blsPublicKeyRecover = wrap_recover(capi._blsPublicKeyRecover, BLS_PUBLICKEY_SIZE, BLS_ID_SIZE)
- capi.blsSignatureRecover = wrap_recover(capi._blsSignatureRecover, BLS_SIGNATURE_SIZE, BLS_ID_SIZE)
+ mod.blsSecretKeySetLittleEndian = wrap_input(mod._blsSecretKeySetLittleEndian, 1)
+ mod.blsHashToSecretKey = wrap_input(mod._blsHashToSecretKey, 1)
+ mod.blsSign = wrap_input(mod._blsSign, 2)
+ mod.blsVerify = wrap_input(mod._blsVerify, 2, true)
class Common {
constructor(size) {
@@ -341,38 +237,43 @@
super(BLS_ID_SIZE)
}
setInt(x) {
- callSetter(capi.blsIdSetInt, this.a_, x)
+ callSetter(mod._blsIdSetInt, this.a_, x)
}
- setByCSPRNG() {
- callSetter(capi.blsSecretKeySetByCSPRNG, this.a_) // same type of BlsSecretKey
+ deserialize(s) {
+ callSetter(mod.blsIdDeserialize, this.a_, s)
+ }
+ serialize() {
+ return callGetter(mod.blsIdSerialize, this.a_)
}
setStr(s, base = 10) {
switch (base) {
case 10:
- callSetter(capi.blsIdSetDecStr, this.a_, s)
+ callSetter(mod.blsIdSetDecStr, this.a_, s)
return
case 16:
- callSetter(capi.blsIdSetHexStr, this.a_, s)
+ callSetter(mod.blsIdSetHexStr, this.a_, s)
return
default:
throw('BlsId.setStr:bad base:' + base)
}
}
- deserialize(s) {
- callSetter(capi.blsIdDeserialize, this.a_, s)
- }
getStr(base = 10) {
switch (base) {
case 10:
- return callGetter(capi.blsIdGetDecStr, this.a_)
+ return callGetter(mod.blsIdGetDecStr, this.a_)
case 16:
- return callGetter(capi.blsIdGetHexStr, this.a_)
+ return callGetter(mod.blsIdGetHexStr, this.a_)
default:
throw('BlsId.getStr:bad base:' + base)
}
}
- serialize() {
- return callGetter(capi.blsIdSerialize, this.a_)
+ setLittleEndian(s) {
+ callSetter(mod.blsSecretKeySetLittleEndian, this.a_, s)
+ }
+ setByCSPRNG() {
+ let a = new Uint8Array(BLS_ID_SIZE)
+ crypto.getRandomValues(a)
+ this.setLittleEndian(a)
}
}
exports.getIdFromHexStr = function(s) {
@@ -386,31 +287,31 @@
super(BLS_SECRETKEY_SIZE)
}
setInt(x) {
- callSetter(capi.blsIdSetInt, this.a_, x) // same as Id
+ callSetter(mod._blsIdSetInt, this.a_, x) // same as Id
}
deserialize(s) {
- callSetter(capi.blsSecretKeyDeserialize, this.a_, s)
- }
- setLittleEndian(s) {
- callSetter(capi.blsSecretKeySetLittleEndian, this.a_, s)
+ callSetter(mod.blsSecretKeyDeserialize, this.a_, s)
}
serialize() {
- return callGetter(capi.blsSecretKeySerialize, this.a_)
+ return callGetter(mod.blsSecretKeySerialize, this.a_)
}
share(msk, id) {
- callShare(capi._blsSecretKeyShare, this.a_, BLS_SECRETKEY_SIZE, msk, id)
+ callShare(mod._blsSecretKeyShare, this.a_, BLS_SECRETKEY_SIZE, msk, id)
}
recover(secVec, idVec) {
- callRecover(capi._blsSecretKeyRecover, this.a_, BLS_SECRETKEY_SIZE, secVec, idVec)
+ callRecover(mod._blsSecretKeyRecover, this.a_, BLS_SECRETKEY_SIZE, secVec, idVec)
}
setHashOf(s) {
- callSetter(capi.blsHashToSecretKey, this.a_, s)
+ callSetter(mod.blsHashToSecretKey, this.a_, s)
+ }
+ setLittleEndian(s) {
+ callSetter(mod.blsSecretKeySetLittleEndian, this.a_, s)
}
setByCSPRNG() {
let a = new Uint8Array(BLS_SECRETKEY_SIZE)
crypto.getRandomValues(a)
this.setLittleEndian(a)
- // callSetter(capi.blsSecretKeySetByCSPRNG, this.a_)
+ // callSetter(mod._blsSecretKeySetByCSPRNG, this.a_)
}
getPublicKey() {
let pub = new exports.PublicKey()
@@ -418,7 +319,7 @@
let secPos = mod.Runtime.stackAlloc(this.a_.length * 4)
let pubPos = mod.Runtime.stackAlloc(pub.a_.length * 4)
mod.HEAP32.set(this.a_, secPos / 4)
- capi.blsGetPublicKey(pubPos, secPos)
+ mod._blsGetPublicKey(pubPos, secPos)
copyToUint32Array(pub.a_, pubPos)
mod.Runtime.stackRestore(stack)
return pub
@@ -435,7 +336,7 @@
let secPos = mod.Runtime.stackAlloc(this.a_.length * 4)
let sigPos = mod.Runtime.stackAlloc(sig.a_.length * 4)
mod.HEAP32.set(this.a_, secPos / 4)
- capi.blsSign(sigPos, secPos, m)
+ mod.blsSign(sigPos, secPos, m)
copyToUint32Array(sig.a_, sigPos)
mod.Runtime.stackRestore(stack)
return sig
@@ -452,16 +353,16 @@
super(BLS_PUBLICKEY_SIZE)
}
deserialize(s) {
- callSetter(capi.blsPublicKeyDeserialize, this.a_, s)
+ callSetter(mod.blsPublicKeyDeserialize, this.a_, s)
}
serialize() {
- return callGetter(capi.blsPublicKeySerialize, this.a_)
+ return callGetter(mod.blsPublicKeySerialize, this.a_)
}
share(msk, id) {
- callShare(capi._blsPublicKeyShare, this.a_, BLS_PUBLICKEY_SIZE, msk, id)
+ callShare(mod._blsPublicKeyShare, this.a_, BLS_PUBLICKEY_SIZE, msk, id)
}
recover(secVec, idVec) {
- callRecover(capi._blsPublicKeyRecover, this.a_, BLS_PUBLICKEY_SIZE, secVec, idVec)
+ callRecover(mod._blsPublicKeyRecover, this.a_, BLS_PUBLICKEY_SIZE, secVec, idVec)
}
verify(sig, m) {
let stack = mod.Runtime.stackSave()
@@ -469,7 +370,7 @@
let sigPos = mod.Runtime.stackAlloc(sig.a_.length * 4)
mod.HEAP32.set(this.a_, pubPos / 4)
mod.HEAP32.set(sig.a_, sigPos / 4)
- let r = capi.blsVerify(sigPos, pubPos, m)
+ let r = mod.blsVerify(sigPos, pubPos, m)
mod.Runtime.stackRestore(stack)
return r != 0
}
@@ -485,13 +386,13 @@
super(BLS_SIGNATURE_SIZE)
}
deserialize(s) {
- callSetter(capi.blsSignatureDeserialize, this.a_, s)
+ callSetter(mod.blsSignatureDeserialize, this.a_, s)
}
serialize() {
- return callGetter(capi.blsSignatureSerialize, this.a_)
+ return callGetter(mod.blsSignatureSerialize, this.a_)
}
recover(secVec, idVec) {
- callRecover(capi._blsSignatureRecover, this.a_, BLS_SIGNATURE_SIZE, secVec, idVec)
+ callRecover(mod._blsSignatureRecover, this.a_, BLS_SIGNATURE_SIZE, secVec, idVec)
}
}
exports.getSignatureFromHexStr = function(s) {