aboutsummaryrefslogtreecommitdiffstats
path: root/docs/demo/bls-demo.js
diff options
context:
space:
mode:
Diffstat (limited to 'docs/demo/bls-demo.js')
-rw-r--r--docs/demo/bls-demo.js410
1 files changed, 112 insertions, 298 deletions
diff --git a/docs/demo/bls-demo.js b/docs/demo/bls-demo.js
index 6c80a31..e6db3a0 100644
--- a/docs/demo/bls-demo.js
+++ b/docs/demo/bls-demo.js
@@ -3,47 +3,28 @@ function setValue(name, val) { document.getElementsByName(name)[0].value = val }
function getText(name) { return document.getElementsByName(name)[0].innerText }
function setText(name, val) { document.getElementsByName(name)[0].innerText = val }
-let moduleInited = false
-
-let module = setupWasm('bls_c.wasm', null, function(mod, ns) {
- define_exported_bls(mod)
- define_bls_extra_functions(mod)
- moduleInited = true
- onChangeSelectCurve()
+bls.init(bls.MCLBN_CURVE_FP254BNB, function() {
+ setText('status', 'ok')
+ setText('curveOrder', bls.capi.blsGetCurveOrder())
})
-function putId(x, msg = "") {
- console.log(msg + ' id=' + Uint8ArrayToHexString(blsIdSerialize(x)))
-}
-function putSecretKey(x, msg = "") {
- console.log(msg + ' sk=' + Uint8ArrayToHexString(blsSecretKeySerialize(x)))
-}
-function putPublicKey(x, msg = "") {
- console.log(msg + ' pk=' + Uint8ArrayToHexString(blsPublicKeySerialize(x)))
-}
-function putSignature(x, msg = "") {
- console.log(msg + ' sig=' + Uint8ArrayToHexString(blsSignatureSerialize(x)))
-}
-
let prevSelectedCurve = -1
function onChangeSelectCurve() {
- if (!moduleInited) return
let obj = document.selectCurve.curveType
let idx = obj.selectedIndex
let curve = obj.options[idx].value
if (curve == prevSelectedCurve) return
prevSelectedCurve = curve
console.log('idx=' + idx)
- let r = blsInit(idx)
+ let r = bls.capi.blsInit(idx)
setText('status', r ? 'err:' + r : 'ok')
- setText('curveOrder', blsGetCurveOrder())
+ setText('curveOrder', bls.capi.blsGetCurveOrder())
}
function rand(val) {
- let x = mclBnFr_malloc()
- mclBnFr_setByCSPRNG(x)
- setValue(val, mclBnFr_getStr(x))
- mcl_free(x)
+ let x = new she.Id()
+ x.setByCSPRNG()
+ setValue(val, c.toHexStr())
}
function bench(label, count, func) {
@@ -57,47 +38,48 @@ function bench(label, count, func) {
}
function benchPairing() {
- let a = mclBnFr_malloc()
- let P = mclBnG1_malloc()
- let Q = mclBnG2_malloc()
- let e = mclBnGT_malloc()
+ let capi = bls.capi
+ let a = capi.mclBnFr_malloc()
+ let P = capi.mclBnG1_malloc()
+ let Q = capi.mclBnG2_malloc()
+ let e = capi.mclBnGT_malloc()
let msg = 'hello wasm'
- mclBnFr_setByCSPRNG(a)
- console.log('a=' + mclBnFr_getStr(a))
- mclBnG1_hashAndMapTo(P, 'abc')
- mclBnG2_hashAndMapTo(Q, 'abc')
- console.log('P=' + mclBnG1_getStr(P))
- console.log('Q=' + mclBnG2_getStr(Q))
- bench('time_pairing', 50, () => mclBn_pairing(e, P, Q))
- bench('time_g1mul', 50, () => mclBnG1_mulCT(P, P, a))
- bench('time_g2mul', 50, () => mclBnG2_mulCT(Q, Q, a))
- bench('time_mapToG1', 50, () => mclBnG1_hashAndMapTo(P, msg))
-
- mcl_free(e)
- mcl_free(Q)
- mcl_free(P)
- mcl_free(a)
-
- let sec = new BlsSecretKey()
+ capi.mclBnFr_setByCSPRNG(a)
+ console.log('a=' + capi.mclBnFr_getStr(a))
+ capi.mclBnG1_hashAndMapTo(P, 'abc')
+ capi.mclBnG2_hashAndMapTo(Q, 'abc')
+ console.log('P=' + capi.mclBnG1_getStr(P))
+ console.log('Q=' + capi.mclBnG2_getStr(Q))
+ bench('time_pairing', 50, () => capi.mclBn_pairing(e, P, Q))
+ bench('time_g1mul', 50, () => capi.mclBnG1_mulCT(P, P, a))
+ bench('time_g2mul', 50, () => capi.mclBnG2_mulCT(Q, Q, a))
+ bench('time_mapToG1', 50, () => capi.mclBnG1_hashAndMapTo(P, msg))
+
+ capi.mcl_free(e)
+ capi.mcl_free(Q)
+ capi.mcl_free(P)
+
+ let sec = new bls.SecretKey()
bench('time_setByCSPRNG', 50, () => sec.setByCSPRNG())
}
function benchBls() {
- let sec = blsSecretKey_malloc()
- let pub = blsPublicKey_malloc()
- let sig = blsSignature_malloc()
+ let capi = bls.capi
+ let sec = capi.blsSecretKey_malloc()
+ let pub = capi.blsPublicKey_malloc()
+ let sig = capi.blsSignature_malloc()
- blsSecretKeySetByCSPRNG(sec)
+ capi.blsSecretKeySetByCSPRNG(sec)
let msg = "hello wasm"
- bench('time_sign', 50, () => blsSign(sig, sec, msg))
- bench('time_verify', 50, () => blsVerify(sig, pub, msg))
+ bench('time_sign', 50, () => capi.blsSign(sig, sec, msg))
+ bench('time_verify', 50, () => capi.blsVerify(sig, pub, msg))
- bls_free(sec)
- bls_free(pub)
- bls_free(sig)
- sec = new BlsSecretKey()
+ capi.bls_free(sec)
+ capi.bls_free(pub)
+ capi.bls_free(sig)
+ sec = new bls.SecretKey()
sec.setByCSPRNG()
pub = sec.getPublicKey()
bench('time_sign_class', 50, () => sec.sign(msg))
@@ -110,93 +92,68 @@ function onClickBenchmark() {
}
function onClickTestPairing() {
+ let capi = bls.capi
document.getElementById('testPairing').disabled = true
- let a = mclBnFr_malloc()
- let b = mclBnFr_malloc()
- let ab = mclBnFr_malloc()
- let P = mclBnG1_malloc()
- let aP = mclBnG1_malloc()
- let Q = mclBnG2_malloc()
- let bQ = mclBnG2_malloc()
- let e1 = mclBnGT_malloc()
- let e2 = mclBnGT_malloc()
-
- mclBnFr_setStr(a, getValue('a'))
- mclBnFr_setStr(b, getValue('b'))
- mclBnFr_mul(ab, a, b)
- setText('ab', mclBnFr_getStr(ab))
-
- mclBnG1_hashAndMapTo(P, getValue('hash_P'))
- setText('P', mclBnG1_getStr(P))
- mclBnG2_hashAndMapTo(Q, getValue('hash_Q'))
- setText('Q', mclBnG2_getStr(Q))
- mclBnG1_mul(aP, P, a)
- setText('aP', mclBnG1_getStr(aP))
- mclBnG2_mul(bQ, Q, b)
- setText('bQ', mclBnG2_getStr(bQ))
-
- mclBn_pairing(e1, P, Q);
- setText('ePQ', mclBnGT_getStr(e1))
- mclBn_pairing(e2, aP, bQ);
- setText('eaPbQ', mclBnGT_getStr(e2))
- mclBnGT_pow(e1, e1, ab)
- setText('ePQab', mclBnGT_getStr(e1))
- setText('verify_pairing', !!mclBnGT_isEqual(e1, e2))
-
- mcl_free(e2)
- mcl_free(e1)
- mcl_free(bQ)
- mcl_free(Q)
- mcl_free(aP)
- mcl_free(P)
- mcl_free(ab)
- mcl_free(b)
- mcl_free(a)
+ let a = capi.mclBnFr_malloc()
+ let b = capi.mclBnFr_malloc()
+ let ab = capi.mclBnFr_malloc()
+ let P = capi.mclBnG1_malloc()
+ let aP = capi.mclBnG1_malloc()
+ let Q = capi.mclBnG2_malloc()
+ let bQ = capi.mclBnG2_malloc()
+ let e1 = capi.mclBnGT_malloc()
+ let e2 = capi.mclBnGT_malloc()
+
+ capi.mclBnFr_setStr(a, getValue('a'))
+ capi.mclBnFr_setStr(b, getValue('b'))
+ capi.mclBnFr_mul(ab, a, b)
+ setText('ab', capi.mclBnFr_getStr(ab))
+
+ capi.mclBnG1_hashAndMapTo(P, getValue('hash_P'))
+ setText('P', capi.mclBnG1_getStr(P))
+ capi.mclBnG2_hashAndMapTo(Q, getValue('hash_Q'))
+ setText('Q', capi.mclBnG2_getStr(Q))
+ capi.mclBnG1_mul(aP, P, a)
+ setText('aP', capi.mclBnG1_getStr(aP))
+ capi.mclBnG2_mul(bQ, Q, b)
+ setText('bQ', capi.mclBnG2_getStr(bQ))
+
+ capi.mclBn_pairing(e1, P, Q);
+ setText('ePQ', capi.mclBnGT_getStr(e1))
+ capi.mclBn_pairing(e2, aP, bQ);
+ setText('eaPbQ', capi.mclBnGT_getStr(e2))
+ capi.mclBnGT_pow(e1, e1, ab)
+ setText('ePQab', capi.mclBnGT_getStr(e1))
+ setText('verify_pairing', !!capi.mclBnGT_isEqual(e1, e2))
+
+ capi.mcl_free(e2)
+ capi.mcl_free(e1)
+ capi.mcl_free(bQ)
+ capi.mcl_free(Q)
+ capi.mcl_free(aP)
+ capi.mcl_free(P)
+ capi.mcl_free(ab)
+ capi.mcl_free(b)
+ capi.mcl_free(a)
document.getElementById('testPairing').disabled = false
}
-function Uint8ArrayToHexString(a) {
- let s = ''
- for (let i = 0; i < a.length; i++) {
- s += ('0' + a[i].toString(16)).slice(-2)
- }
- return s
-}
-
-function HexStringToUint8Array(s) {
- let n = (s.length + 1) / 2
- let a = new Uint8Array(n)
- for (let i = 0; i < s.length / 2; i++) {
- a[i] = parseInt(s.slice(i * 2, i * 2 + 2), 16)
- }
- if ((s.length & 1) != 0) {
- a[n - 1] = parseInt(s[s.length - 1] + '0', 16)
- }
- return a
-}
-
function onClickTestSignature() {
- let secretKey = blsSecretKey_malloc()
- let publicKey = blsPublicKey_malloc()
- let signature = blsSignature_malloc()
+ let sec = new bls.SecretKey()
- blsSecretKeySetByCSPRNG(secretKey)
- setText('secretKey', Uint8ArrayToHexString(blsSecretKeySerialize(secretKey)))
+ sec.setByCSPRNG()
+ setText('secretKey', sec.toHexStr())
- blsGetPublicKey(publicKey, secretKey)
- setText('publicKey', Uint8ArrayToHexString(blsPublicKeySerialize(publicKey)))
+ let pub = sec.getPublicKey()
+ setText('publicKey', pub.toHexStr())
let msg = getValue('msg')
console.log('msg=' + msg)
- blsSign(signature, secretKey, msg)
- setText('signature', Uint8ArrayToHexString(blsSignatureSerialize(signature)))
+ let sig = sec.sign(msg)
+ setText('signature', sig.toHexStr())
- let r = blsVerify(signature, publicKey, msg)
+ let r = pub.verify(sig, msg)
setText('verifyResult', r ? 'ok' : 'err')
-
- bls_free(signature)
- bls_free(publicKey)
- bls_free(secretKey)
}
/*
@@ -221,164 +178,21 @@ function randSelect(k, n) {
return a
}
-function evalFunc(y, vec, x) {
- mclBnFr_mul(y, vec[1], x)
- mclBnFr_add(y, y, vec[0])
-}
-
-function onClickTestShare()
-{
- let k = parseInt(getValue('ss_k'))
- let n = parseInt(getValue('ss_n'))
- let msg = getValue('msg2')
- console.log('k = ' + k)
- console.log('n = ' + n)
- console.log('msg = ' + msg)
- if (n < k) {
- alert('err : n is smaller than k')
- return
- }
- let msk = []
- let mpk = []
- let idVec = []
- let secVec = []
- let pubVec = []
- let sigVec = []
-
- /*
- setup master secret key
- */
- for (let i = 0; i < k; i++) {
- let sk = blsSecretKey_malloc()
- blsSecretKeySetByCSPRNG(sk)
- msk.push(sk)
-
- let pk = blsPublicKey_malloc()
- blsGetPublicKey(pk, sk)
- mpk.push(pk)
- }
- setText('msk', Uint8ArrayToHexString(blsSecretKeySerialize(msk[0])))
- setText('mpk', Uint8ArrayToHexString(blsPublicKeySerialize(mpk[0])))
- {
- let sig = blsSignature_malloc()
- blsSign(sig, msk[0], msg)
- setText('signature2', Uint8ArrayToHexString(blsSignatureSerialize(sig)))
- bls_free(sig)
- }
-
- /*
- key sharing
- */
- for (let i = 0; i < n; i++) {
- let id = blsId_malloc()
-// blsIdSetInt(id, i + 1)
- blsSecretKeySetByCSPRNG(id) // Id is same type of SecretKey
- idVec.push(id)
- let sk = blsSecretKey_malloc()
- blsSecretKeyShare(sk, msk, idVec[i])
- secVec.push(sk)
-
- let pk = blsPublicKey_malloc()
- blsPublicKeyShare(pk, mpk, idVec[i])
- pubVec.push(pk)
-
- {
- let pk2 = blsPublicKey_malloc()
- blsGetPublicKey(pk2, sk)
- console.log(i + ' : pk == pk2 : ' + mclBnG2_isEqual(pk, pk2))
- bls_free(pk2)
- }
-
- let sig = blsSignature_malloc()
- blsSign(sig, sk, msg)
- sigVec.push(sig)
- console.log(i + ' : verify msg : ' + blsVerify(sig, pk, msg))
- }
-
- let o = document.getElementById('idlist')
- let ol = document.createElement('ol')
- let t = ''
- for (let i = 0; i < n; i++) {
- let id = Uint8ArrayToHexString(blsIdSerialize(idVec[i]))
- let sk = Uint8ArrayToHexString(blsSecretKeySerialize(secVec[i]))
- let pk = Uint8ArrayToHexString(blsPublicKeySerialize(pubVec[i]))
- let sig = Uint8ArrayToHexString(blsSignatureSerialize(sigVec[i]))
- t += '<li id="ui"' + i + '"> '
- t += 'id : <span id="id"' + i + '">' + id + '</span><br>'
- t += 'pk : <span id="pk"' + i + '">' + pk + '</span><br>'
- t += 'sk : <span id="sk"' + i + '">' + sk + '</span><br>'
- t += 'sig: <span id="sig"' + i + '">' + sig + '</span><br>'
- }
- ol.innerHTML = t
- o.firstElementChild.innerHTML = ol.innerHTML
-
- /*
- recover
- */
- let idxVec = randSelect(k, n)
- setText('idxVec', idxVec.toString())
- let subIdVec = []
- let subSecVec = []
- let subPubVec = []
- let subSigVec = []
- for (let i = 0; i < idxVec.length; i++) {
- let idx = idxVec[i]
- subIdVec.push(idVec[idx])
- subSecVec.push(secVec[idx])
- subPubVec.push(pubVec[idx])
- subSigVec.push(sigVec[idx])
- }
- {
- let sec = blsSecretKey_malloc()
- let pub = blsPublicKey_malloc()
- let sig = blsSignature_malloc()
-
- blsSecretKeyRecover(sec, subSecVec, subIdVec)
- blsPublicKeyRecover(pub, subPubVec, subIdVec)
- blsSignatureRecover(sig, subSigVec, subIdVec)
- let s = Uint8ArrayToHexString(blsSecretKeySerialize(sec))
- s += s == getText('msk') ? ' :ok' : ' :ng'
- setText('recoverSec', s)
- s = Uint8ArrayToHexString(blsPublicKeySerialize(pub))
- s += s == getText('mpk') ? ' :ok' : ' :ng'
- setText('recoverPub', s)
- s = Uint8ArrayToHexString(blsSignatureSerialize(sig))
- s += s == getText('signature2') ? ' :ok' : ' :ng'
- setText('recoverSig', s)
-
- bls_free(sig)
- bls_free(pub)
- bls_free(sec)
- }
-
-
- for (let i = 0; i < n; i++) {
- bls_free(idVec[i])
- bls_free(secVec[i])
- bls_free(pubVec[i])
- bls_free(sigVec[i])
- }
- for (let i = 0; i < mpk.length; i++) {
- bls_free(mpk[i])
- bls_free(msk[i])
- }
-}
-
function onClickTestMisc()
{
let idDec = getValue('idDec')
console.log('idDec=' + idDec)
- var id = new BlsId()
+ var id = new bls.Id()
id.setStr(idDec)
setText('idDec2', id.getStr())
setText('idHex', id.getStr(16))
- var sec = new BlsSecretKey()
- sec.setLittleEndian(HexStringToUint8Array(getValue('sec1')))
+ var sec = new bls.SecretKey()
+ sec.setLittleEndian(bls.fromHexStr(getValue('sec1')))
var a = sec.serialize()
- setText('secSerialize', Uint8ArrayToHexString(a))
+ setText('secSerialize', bls.toHexStr(a))
}
-function onClickTestShareClass()
+function onClickTestShare()
{
let k = parseInt(getValue('ss_k'))
let n = parseInt(getValue('ss_n'))
@@ -401,18 +215,18 @@ function onClickTestShareClass()
setup master secret key
*/
for (let i = 0; i < k; i++) {
- let sk = new BlsSecretKey()
+ let sk = new bls.SecretKey()
sk.setByCSPRNG()
msk.push(sk)
let pk = sk.getPublicKey()
mpk.push(pk)
}
- setText('msk', Uint8ArrayToHexString(msk[0].serialize()))
- setText('mpk', Uint8ArrayToHexString(mpk[0].serialize()))
+ setText('msk', bls.toHexStr(msk[0].serialize()))
+ setText('mpk', bls.toHexStr(mpk[0].serialize()))
{
let sig = msk[0].sign(msg)
- setText('signature2', Uint8ArrayToHexString(sig.serialize()))
+ setText('signature2', bls.toHexStr(sig.serialize()))
console.log('mpk[0] verify ' + mpk[0].verify(sig, msg))
}
@@ -420,15 +234,15 @@ function onClickTestShareClass()
key sharing
*/
for (let i = 0; i < n; i++) {
- let id = new BlsId()
+ let id = new bls.Id()
// blsIdSetInt(id, i + 1)
id.setByCSPRNG()
idVec.push(id)
- let sk = new BlsSecretKey()
+ let sk = new bls.SecretKey()
sk.share(msk, idVec[i])
secVec.push(sk)
- let pk = new BlsPublicKey()
+ let pk = new bls.PublicKey()
pk.share(mpk, idVec[i])
pubVec.push(pk)
@@ -441,10 +255,10 @@ function onClickTestShareClass()
let ol = document.createElement('ol')
let t = ''
for (let i = 0; i < n; i++) {
- let id = Uint8ArrayToHexString(idVec[i].serialize())
- let sk = Uint8ArrayToHexString(secVec[i].serialize())
- let pk = Uint8ArrayToHexString(pubVec[i].serialize())
- let sig = Uint8ArrayToHexString(sigVec[i].serialize())
+ let id = idVec[i].toHexStr()
+ let sk = secVec[i].toHexStr()
+ let pk = pubVec[i].toHexStr()
+ let sig = sigVec[i].toHexStr()
t += '<li id="ui"' + i + '"> '
t += 'id : <span id="id"' + i + '">' + id + '</span><br>'
t += 'pk : <span id="pk"' + i + '">' + pk + '</span><br>'
@@ -471,20 +285,20 @@ function onClickTestShareClass()
subSigVec.push(sigVec[idx])
}
{
- let sec = new BlsSecretKey()
- let pub = new BlsPublicKey()
- let sig = new BlsSignature()
+ let sec = new bls.SecretKey()
+ let pub = new bls.PublicKey()
+ let sig = new bls.Signature()
sec.recover(subSecVec, subIdVec)
pub.recover(subPubVec, subIdVec)
sig.recover(subSigVec, subIdVec)
- let s = Uint8ArrayToHexString(sec.serialize())
+ let s = sec.toHexStr()
s += s == getText('msk') ? ' :ok' : ' :ng'
setText('recoverSec', s)
- s = Uint8ArrayToHexString(pub.serialize())
+ s = pub.toHexStr()
s += s == getText('mpk') ? ' :ok' : ' :ng'
setText('recoverPub', s)
- s = Uint8ArrayToHexString(sig.serialize())
+ s = sig.toHexStr()
s += s == getText('signature2') ? ' :ok' : ' :ng'
setText('recoverSig', s)
}