aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2017-09-16 10:48:30 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2017-09-16 10:48:30 +0800
commit3659e4d9bbfc6bff0df70afd200234f2eccf0d57 (patch)
tree39546bdfc3efa989d904e08281808bf8b69f5f41
parent0162fb6db423de2fae7a239ebdf2666d1dfa5b7c (diff)
downloaddexon-bls-3659e4d9bbfc6bff0df70afd200234f2eccf0d57.tar
dexon-bls-3659e4d9bbfc6bff0df70afd200234f2eccf0d57.tar.gz
dexon-bls-3659e4d9bbfc6bff0df70afd200234f2eccf0d57.tar.bz2
dexon-bls-3659e4d9bbfc6bff0df70afd200234f2eccf0d57.tar.lz
dexon-bls-3659e4d9bbfc6bff0df70afd200234f2eccf0d57.tar.xz
dexon-bls-3659e4d9bbfc6bff0df70afd200234f2eccf0d57.tar.zst
dexon-bls-3659e4d9bbfc6bff0df70afd200234f2eccf0d57.zip
splict bls-demo.js into bls-demo.js and bls.js
-rw-r--r--docs/demo/bls-demo.js227
-rw-r--r--docs/demo/bls.html3
-rw-r--r--docs/demo/bls.js225
3 files changed, 228 insertions, 227 deletions
diff --git a/docs/demo/bls-demo.js b/docs/demo/bls-demo.js
index ff72fa8..7adb094 100644
--- a/docs/demo/bls-demo.js
+++ b/docs/demo/bls-demo.js
@@ -3,240 +3,15 @@ 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 }
-function setupWasm(fileName, nameSpace, setupFct) {
- console.log('setupWasm ' + fileName)
- let mod = {}
- fetch(fileName)
- .then(response => response.arrayBuffer())
- .then(buffer => new Uint8Array(buffer))
- .then(binary => {
- mod['wasmBinary'] = binary
- mod['onRuntimeInitialized'] = function() {
- setupFct(mod, nameSpace)
- console.log('setupWasm end')
- }
- Module(mod)
- })
- return mod
-}
-
-const MCLBN_CURVE_FP254BNB = 0
-const MCLBN_CURVE_FP382_1 = 1
-const MCLBN_CURVE_FP382_2 = 2
-
-const MCLBN_FP_UNIT_SIZE = 6
-
let moduleInited = false
let module = setupWasm('bls_c.wasm', null, function(mod, ns) {
define_exported_bls(mod)
- define_extra_functions(mod)
+ define_bls_extra_functions(mod)
moduleInited = true
onChangeSelectCurve()
})
-function define_extra_functions(mod) {
- wrap_outputString = function(func, doesReturnString = true) {
- return function(x, ioMode = 0) {
- let maxBufSize = 2048
- let stack = mod.Runtime.stackSave()
- let pos = mod.Runtime.stackAlloc(maxBufSize)
- let n = func(pos, maxBufSize, x, ioMode)
- if (n < 0) {
- throw('err gen_str:' + x)
- }
- if (doesReturnString) {
- let s = ''
- for (let i = 0; i < n; i++) {
- s += String.fromCharCode(mod.HEAP8[pos + i])
- }
- mod.Runtime.stackRestore(stack)
- return s
- } else {
- let a = new Uint8Array(n)
- for (let i = 0; i < n; i++) {
- a[i] = mod.HEAP8[pos + i]
- }
- mod.Runtime.stackRestore(stack)
- return a
- }
- }
- }
- wrap_outputArray = function(func) {
- return wrap_outputString(func, false)
- }
- wrap_input0 = function(func, returnValue = false) {
- return function(buf, ioMode = 0) {
- let stack = mod.Runtime.stackSave()
- let pos = mod.Runtime.stackAlloc(buf.length)
- if (typeof(buf) == "string") {
- for (let i = 0; i < buf.length; i++) {
- mod.HEAP8[pos + i] = buf.charCodeAt(i)
- }
- } else {
- for (let i = 0; i < buf.length; i++) {
- mod.HEAP8[pos + i] = buf[i]
- }
- }
- let r = func(pos, buf.length, ioMode)
- mod.Runtime.stackRestore(stack)
- if (returnValue) return r
- if (r) throw('err wrap_input0 ' + buf)
- }
- }
- wrap_input1 = function(func, returnValue = false) {
- return function(x1, buf, ioMode = 0) {
- let stack = mod.Runtime.stackSave()
- let pos = mod.Runtime.stackAlloc(buf.length)
- if (typeof(buf) == "string") {
- for (let i = 0; i < buf.length; i++) {
- mod.HEAP8[pos + i] = buf.charCodeAt(i)
- }
- } else {
- for (let i = 0; i < buf.length; i++) {
- mod.HEAP8[pos + i] = buf[i]
- }
- }
- let r = func(x1, pos, buf.length, ioMode)
- mod.Runtime.stackRestore(stack)
- if (returnValue) return r
- if (r) throw('err wrap_input1 ' + buf)
- }
- }
- wrap_input2 = function(func, returnValue = false) {
- return function(x1, x2, buf, ioMode = 0) {
- let stack = mod.Runtime.stackSave()
- let pos = mod.Runtime.stackAlloc(buf.length)
- if (typeof(buf) == "string") {
- for (let i = 0; i < buf.length; i++) {
- mod.HEAP8[pos + i] = buf.charCodeAt(i)
- }
- } else {
- for (let i = 0; i < buf.length; i++) {
- mod.HEAP8[pos + i] = buf[i]
- }
- }
- let r = func(x1, x2, pos, buf.length, ioMode)
- mod.Runtime.stackRestore(stack)
- if (returnValue) return r
- if (r) throw('err wrap_input2 ' + buf)
- }
- }
- 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)
- }
- }
- 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 FR_SIZE = MCLBN_FP_UNIT_SIZE * 8
- const G1_SIZE = FR_SIZE * 3
- const G2_SIZE = FR_SIZE * 3 * 2
- const GT_SIZE = FR_SIZE * 12
-
- const ID_SIZE = FR_SIZE
- const SECRETKEY_SIZE = FR_SIZE
- const PUBLICKEY_SIZE = G2_SIZE
- const SIGNATURE_SIZE = G1_SIZE
-
- mclBnFr_malloc = function() {
- return mod._malloc(FR_SIZE)
- }
- mcl_free = function(x) {
- mod._free(x)
- }
- mclBnFr_deserialize = wrap_input1(_mclBnFr_deserialize)
- mclBnFr_setLittleEndian = wrap_input1(_mclBnFr_setLittleEndian)
- mclBnFr_setStr = wrap_input1(_mclBnFr_setStr)
- mclBnFr_getStr = wrap_outputString(_mclBnFr_getStr)
- mclBnFr_setHashOf = wrap_input1(_mclBnFr_setHashOf)
-
- ///////////////////////////////////////////////////////////////
- mclBnG1_malloc = function() {
- return mod._malloc(G1_SIZE)
- }
- mclBnG1_setStr = wrap_input1(_mclBnG1_setStr)
- mclBnG1_getStr = wrap_outputString(_mclBnG1_getStr)
- mclBnG1_deserialize = wrap_input1(_mclBnG1_deserialize)
- mclBnG1_serialize = wrap_outputArray(_mclBnG1_serialize)
- mclBnG1_hashAndMapTo = wrap_input1(_mclBnG1_hashAndMapTo)
-
- ///////////////////////////////////////////////////////////////
- mclBnG2_malloc = function() {
- return mod._malloc(G2_SIZE)
- }
- mclBnG2_setStr = wrap_input1(_mclBnG2_setStr)
- mclBnG2_getStr = wrap_outputString(_mclBnG2_getStr)
- mclBnG2_deserialize = wrap_input1(_mclBnG2_deserialize)
- mclBnG2_serialize = wrap_outputArray(_mclBnG2_serialize)
- mclBnG2_hashAndMapTo = wrap_input1(_mclBnG2_hashAndMapTo)
-
- ///////////////////////////////////////////////////////////////
- mclBnGT_malloc = function() {
- return mod._malloc(GT_SIZE)
- }
- mclBnGT_deserialize = wrap_input1(_mclBnGT_deserialize)
- mclBnGT_serialize = wrap_outputArray(_mclBnGT_serialize)
- mclBnGT_setStr = wrap_input1(_mclBnGT_setStr)
- mclBnGT_getStr = wrap_outputString(_mclBnGT_getStr)
- ///////////////////////////////////////////////////////////////
- bls_free = mcl_free
- blsId_malloc = mclBnFr_malloc
- blsSecretKey_malloc = mclBnFr_malloc
- blsPublicKey_malloc = mclBnG2_malloc
- blsSignature_malloc = mclBnG1_malloc
-
- blsGetCurveOrder = wrap_outputString(_blsGetCurveOrder)
- blsGetFieldOrder = wrap_outputString(_blsGetFieldOrder)
-
- blsIdSetDecStr = wrap_input1(_blsIdSetDecStr)
- blsIdSetHexStr = wrap_input1(_blsIdSetHexStr)
- blsIdGetDecStr = wrap_outputArray(_blsIdGetDecStr)
- blsIdGetHexStr = wrap_outputArray(_blsIdGetHexStr)
-
- blsIdSerialize = wrap_outputArray(_blsIdSerialize)
- blsSecretKeySerialize = wrap_outputArray(_blsSecretKeySerialize)
- blsPublicKeySerialize = wrap_outputArray(_blsPublicKeySerialize)
- blsSignatureSerialize = wrap_outputArray(_blsSignatureSerialize)
-
- blsIdDeserialize = wrap_input1(_blsIdDeserialize)
- blsSecretKeyDeserialize = wrap_input1(_blsSecretKeyDeserialize)
- blsPublicKeyDeserialize = wrap_input1(_blsPublicKeyDeserialize)
- blsSignatureDeserialize = wrap_input1(_blsSignatureDeserialize)
-
- blsHashToSecretKey = wrap_input1(_blsHashToSecretKey)
- blsSign = wrap_input2(_blsSign)
- blsVerify = wrap_input2(_blsVerify, true)
-
- blsSecretKeyShare = wrap_keyShare(_blsSecretKeyShare, SECRETKEY_SIZE)
- blsPublicKeyShare = wrap_keyShare(_blsPublicKeyShare, PUBLICKEY_SIZE)
-
- blsSecretKeyRecover = wrap_recover(_blsSecretKeyRecover, SECRETKEY_SIZE, ID_SIZE)
- blsPublicKeyRecover = wrap_recover(_blsPublicKeyRecover, PUBLICKEY_SIZE, ID_SIZE)
- blsSignatureRecover = wrap_recover(_blsSignatureRecover, SIGNATURE_SIZE, ID_SIZE)
-}
-
function putId(x, msg = "") {
console.log(msg + ' id=' + Uint8ArrayToHexString(blsIdSerialize(x)))
}
diff --git a/docs/demo/bls.html b/docs/demo/bls.html
index 078c13a..a2d23be 100644
--- a/docs/demo/bls.html
+++ b/docs/demo/bls.html
@@ -4,8 +4,9 @@
<meta charset="UTF-8">
<title>BLS signature sample</title>
<link rel="stylesheet" href="style.css" type="text/css">
-<script type='text/javascript' src="./bls_c.js"></script>
<script type='text/javascript' src="./exported-bls.js"></script>
+<script type='text/javascript' src="./bls_c.js"></script>
+<script type='text/javascript' src="./bls.js"></script>
<script type='text/javascript' src="./bls-demo.js"></script>
</script>
</head>
diff --git a/docs/demo/bls.js b/docs/demo/bls.js
new file mode 100644
index 0000000..9176c75
--- /dev/null
+++ b/docs/demo/bls.js
@@ -0,0 +1,225 @@
+function setupWasm(fileName, nameSpace, setupFct) {
+ console.log('setupWasm ' + fileName)
+ let mod = {}
+ fetch(fileName)
+ .then(response => response.arrayBuffer())
+ .then(buffer => new Uint8Array(buffer))
+ .then(binary => {
+ mod['wasmBinary'] = binary
+ mod['onRuntimeInitialized'] = function() {
+ setupFct(mod, nameSpace)
+ console.log('setupWasm end')
+ }
+ Module(mod)
+ })
+ return mod
+}
+
+const MCLBN_CURVE_FP254BNB = 0
+const MCLBN_CURVE_FP382_1 = 1
+const MCLBN_CURVE_FP382_2 = 2
+
+const MCLBN_FP_UNIT_SIZE = 6
+
+function define_bls_extra_functions(mod) {
+ wrap_outputString = function(func, doesReturnString = true) {
+ return function(x, ioMode = 0) {
+ let maxBufSize = 2048
+ let stack = mod.Runtime.stackSave()
+ let pos = mod.Runtime.stackAlloc(maxBufSize)
+ let n = func(pos, maxBufSize, x, ioMode)
+ if (n < 0) {
+ throw('err gen_str:' + x)
+ }
+ if (doesReturnString) {
+ let s = ''
+ for (let i = 0; i < n; i++) {
+ s += String.fromCharCode(mod.HEAP8[pos + i])
+ }
+ mod.Runtime.stackRestore(stack)
+ return s
+ } else {
+ let a = new Uint8Array(n)
+ for (let i = 0; i < n; i++) {
+ a[i] = mod.HEAP8[pos + i]
+ }
+ mod.Runtime.stackRestore(stack)
+ return a
+ }
+ }
+ }
+ wrap_outputArray = function(func) {
+ return wrap_outputString(func, false)
+ }
+ wrap_input0 = function(func, returnValue = false) {
+ return function(buf, ioMode = 0) {
+ let stack = mod.Runtime.stackSave()
+ let pos = mod.Runtime.stackAlloc(buf.length)
+ if (typeof(buf) == "string") {
+ for (let i = 0; i < buf.length; i++) {
+ mod.HEAP8[pos + i] = buf.charCodeAt(i)
+ }
+ } else {
+ for (let i = 0; i < buf.length; i++) {
+ mod.HEAP8[pos + i] = buf[i]
+ }
+ }
+ let r = func(pos, buf.length, ioMode)
+ mod.Runtime.stackRestore(stack)
+ if (returnValue) return r
+ if (r) throw('err wrap_input0 ' + buf)
+ }
+ }
+ wrap_input1 = function(func, returnValue = false) {
+ return function(x1, buf, ioMode = 0) {
+ let stack = mod.Runtime.stackSave()
+ let pos = mod.Runtime.stackAlloc(buf.length)
+ if (typeof(buf) == "string") {
+ for (let i = 0; i < buf.length; i++) {
+ mod.HEAP8[pos + i] = buf.charCodeAt(i)
+ }
+ } else {
+ for (let i = 0; i < buf.length; i++) {
+ mod.HEAP8[pos + i] = buf[i]
+ }
+ }
+ let r = func(x1, pos, buf.length, ioMode)
+ mod.Runtime.stackRestore(stack)
+ if (returnValue) return r
+ if (r) throw('err wrap_input1 ' + buf)
+ }
+ }
+ wrap_input2 = function(func, returnValue = false) {
+ return function(x1, x2, buf, ioMode = 0) {
+ let stack = mod.Runtime.stackSave()
+ let pos = mod.Runtime.stackAlloc(buf.length)
+ if (typeof(buf) == "string") {
+ for (let i = 0; i < buf.length; i++) {
+ mod.HEAP8[pos + i] = buf.charCodeAt(i)
+ }
+ } else {
+ for (let i = 0; i < buf.length; i++) {
+ mod.HEAP8[pos + i] = buf[i]
+ }
+ }
+ let r = func(x1, x2, pos, buf.length, ioMode)
+ mod.Runtime.stackRestore(stack)
+ if (returnValue) return r
+ if (r) throw('err wrap_input2 ' + buf)
+ }
+ }
+ 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)
+ }
+ }
+ 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 FR_SIZE = MCLBN_FP_UNIT_SIZE * 8
+ const G1_SIZE = FR_SIZE * 3
+ const G2_SIZE = FR_SIZE * 3 * 2
+ const GT_SIZE = FR_SIZE * 12
+
+ const ID_SIZE = FR_SIZE
+ const SECRETKEY_SIZE = FR_SIZE
+ const PUBLICKEY_SIZE = G2_SIZE
+ const SIGNATURE_SIZE = G1_SIZE
+
+ mclBnFr_malloc = function() {
+ return mod._malloc(FR_SIZE)
+ }
+ mcl_free = function(x) {
+ mod._free(x)
+ }
+ mclBnFr_deserialize = wrap_input1(_mclBnFr_deserialize)
+ mclBnFr_setLittleEndian = wrap_input1(_mclBnFr_setLittleEndian)
+ mclBnFr_setStr = wrap_input1(_mclBnFr_setStr)
+ mclBnFr_getStr = wrap_outputString(_mclBnFr_getStr)
+ mclBnFr_setHashOf = wrap_input1(_mclBnFr_setHashOf)
+
+ ///////////////////////////////////////////////////////////////
+ mclBnG1_malloc = function() {
+ return mod._malloc(G1_SIZE)
+ }
+ mclBnG1_setStr = wrap_input1(_mclBnG1_setStr)
+ mclBnG1_getStr = wrap_outputString(_mclBnG1_getStr)
+ mclBnG1_deserialize = wrap_input1(_mclBnG1_deserialize)
+ mclBnG1_serialize = wrap_outputArray(_mclBnG1_serialize)
+ mclBnG1_hashAndMapTo = wrap_input1(_mclBnG1_hashAndMapTo)
+
+ ///////////////////////////////////////////////////////////////
+ mclBnG2_malloc = function() {
+ return mod._malloc(G2_SIZE)
+ }
+ mclBnG2_setStr = wrap_input1(_mclBnG2_setStr)
+ mclBnG2_getStr = wrap_outputString(_mclBnG2_getStr)
+ mclBnG2_deserialize = wrap_input1(_mclBnG2_deserialize)
+ mclBnG2_serialize = wrap_outputArray(_mclBnG2_serialize)
+ mclBnG2_hashAndMapTo = wrap_input1(_mclBnG2_hashAndMapTo)
+
+ ///////////////////////////////////////////////////////////////
+ mclBnGT_malloc = function() {
+ return mod._malloc(GT_SIZE)
+ }
+ mclBnGT_deserialize = wrap_input1(_mclBnGT_deserialize)
+ mclBnGT_serialize = wrap_outputArray(_mclBnGT_serialize)
+ mclBnGT_setStr = wrap_input1(_mclBnGT_setStr)
+ mclBnGT_getStr = wrap_outputString(_mclBnGT_getStr)
+ ///////////////////////////////////////////////////////////////
+ bls_free = mcl_free
+ blsId_malloc = mclBnFr_malloc
+ blsSecretKey_malloc = mclBnFr_malloc
+ blsPublicKey_malloc = mclBnG2_malloc
+ blsSignature_malloc = mclBnG1_malloc
+
+ blsGetCurveOrder = wrap_outputString(_blsGetCurveOrder)
+ blsGetFieldOrder = wrap_outputString(_blsGetFieldOrder)
+
+ blsIdSetDecStr = wrap_input1(_blsIdSetDecStr)
+ blsIdSetHexStr = wrap_input1(_blsIdSetHexStr)
+ blsIdGetDecStr = wrap_outputArray(_blsIdGetDecStr)
+ blsIdGetHexStr = wrap_outputArray(_blsIdGetHexStr)
+
+ blsIdSerialize = wrap_outputArray(_blsIdSerialize)
+ blsSecretKeySerialize = wrap_outputArray(_blsSecretKeySerialize)
+ blsPublicKeySerialize = wrap_outputArray(_blsPublicKeySerialize)
+ blsSignatureSerialize = wrap_outputArray(_blsSignatureSerialize)
+
+ blsIdDeserialize = wrap_input1(_blsIdDeserialize)
+ blsSecretKeyDeserialize = wrap_input1(_blsSecretKeyDeserialize)
+ blsPublicKeyDeserialize = wrap_input1(_blsPublicKeyDeserialize)
+ blsSignatureDeserialize = wrap_input1(_blsSignatureDeserialize)
+
+ blsHashToSecretKey = wrap_input1(_blsHashToSecretKey)
+ blsSign = wrap_input2(_blsSign)
+ blsVerify = wrap_input2(_blsVerify, true)
+
+ blsSecretKeyShare = wrap_keyShare(_blsSecretKeyShare, SECRETKEY_SIZE)
+ blsPublicKeyShare = wrap_keyShare(_blsPublicKeyShare, PUBLICKEY_SIZE)
+
+ blsSecretKeyRecover = wrap_recover(_blsSecretKeyRecover, SECRETKEY_SIZE, ID_SIZE)
+ blsPublicKeyRecover = wrap_recover(_blsPublicKeyRecover, PUBLICKEY_SIZE, ID_SIZE)
+ blsSignatureRecover = wrap_recover(_blsSignatureRecover, SIGNATURE_SIZE, ID_SIZE)
+}
+