Add json Marshalers

This commit is contained in:
arnaucube
2021-01-17 19:33:56 +01:00
parent becff7b647
commit 6b93980674
6 changed files with 283 additions and 86 deletions

View File

@@ -1,12 +1,13 @@
package main
import (
"blindsecp256k1"
"fmt"
"math/big"
"syscall/js"
blindsecp256k1v0 "blindsecp256k1/v0"
"github.com/arnaucube/go-blindsecp256k1"
blindsecp256k1v0 "github.com/arnaucube/go-blindsecp256k1/v0"
)
func main() {
@@ -17,14 +18,18 @@ func main() {
}
func registerCallbacks() {
js.Global().Set("wasmReady", js.FuncOf(ready))
// blindv0 & unblindv0 uses:
// http://www.isecure-journal.com/article_39171_47f9ec605dd3918c2793565ec21fcd7a.pdf
js.Global().Set("blindv0", js.FuncOf(blindv0))
js.Global().Set("unblindv0", js.FuncOf(unblindv0))
js.Global().Set("wasmBlindv0", js.FuncOf(blindv0))
js.Global().Set("wasmUnblindv0", js.FuncOf(unblindv0))
js.Global().Set("wasmVerifyv0", js.FuncOf(verifyv0))
// blind & unblind uses: https://sci-hub.do/10.1109/ICCKE.2013.6682844
js.Global().Set("blind", js.FuncOf(blind))
js.Global().Set("unblind", js.FuncOf(unblind))
js.Global().Set("wasmBlind", js.FuncOf(blind))
js.Global().Set("wasmUnblind", js.FuncOf(unblind))
js.Global().Set("wasmVerify", js.FuncOf(verify))
}
func stringToBigInt(s string) *big.Int {
@@ -35,6 +40,10 @@ func stringToBigInt(s string) *big.Int {
return b
}
func ready(this js.Value, values []js.Value) interface{} {
return "ready"
}
func blindv0(this js.Value, values []js.Value) interface{} {
mStr := values[0].String()
signerQxStr := values[1].String()
@@ -48,11 +57,11 @@ func blindv0(this js.Value, values []js.Value) interface{} {
signerRx := stringToBigInt(signerRxStr)
signerRy := stringToBigInt(signerRyStr)
signerQ := &blindsecp256k1v0.PublicKey{
signerQ := &blindsecp256k1.PublicKey{
X: signerQx,
Y: signerQy,
}
signerR := &blindsecp256k1v0.Point{
signerR := &blindsecp256k1.Point{
X: signerRx,
Y: signerRy,
}
@@ -85,7 +94,7 @@ func unblindv0(this js.Value, values []js.Value) interface{} {
uFx := stringToBigInt(uFxStr)
uFy := stringToBigInt(uFyStr)
uF := &blindsecp256k1v0.Point{
uF := &blindsecp256k1.Point{
X: uFx,
Y: uFy,
}
@@ -105,6 +114,39 @@ func unblindv0(this js.Value, values []js.Value) interface{} {
r["fy"] = sig.F.Y.String()
return r
}
func verifyv0(this js.Value, values []js.Value) interface{} {
mStr := values[0].String()
sigSStr := values[1].String()
sigFxStr := values[2].String()
sigFyStr := values[3].String()
qxStr := values[4].String()
qyStr := values[5].String()
m := stringToBigInt(mStr)
sigS := stringToBigInt(sigSStr)
sigFx := stringToBigInt(sigFxStr)
sigFy := stringToBigInt(sigFyStr)
qx := stringToBigInt(qxStr)
qy := stringToBigInt(qyStr)
q := &blindsecp256k1.PublicKey{
X: qx,
Y: qy,
}
sig := &blindsecp256k1.Signature{
S: sigS,
F: &blindsecp256k1.Point{
X: sigFx,
Y: sigFy,
},
}
verified := blindsecp256k1.Verify(m, sig, q)
r := verified
return r
}
func blind(this js.Value, values []js.Value) interface{} {
mStr := values[0].String()
signerRxStr := values[1].String()
@@ -164,3 +206,35 @@ func unblind(this js.Value, values []js.Value) interface{} {
r["fy"] = sig.F.Y.String()
return r
}
func verify(this js.Value, values []js.Value) interface{} {
mStr := values[0].String()
sigSStr := values[1].String()
sigFxStr := values[2].String()
sigFyStr := values[3].String()
qxStr := values[4].String()
qyStr := values[5].String()
m := stringToBigInt(mStr)
sigS := stringToBigInt(sigSStr)
sigFx := stringToBigInt(sigFxStr)
sigFy := stringToBigInt(sigFyStr)
qx := stringToBigInt(qxStr)
qy := stringToBigInt(qyStr)
q := &blindsecp256k1.PublicKey{
X: qx,
Y: qy,
}
sig := &blindsecp256k1.Signature{
S: sigS,
F: &blindsecp256k1.Point{
X: sigFx,
Y: sigFy,
},
}
verified := blindsecp256k1.Verify(m, sig, q)
r := verified
return r
}

Binary file not shown.

View File

@@ -3,25 +3,36 @@ function test() {
console.log("using: https://sci-hub.do/10.1109/ICCKE.2013.6682844");
// R would be received from the Signer
let signerRx = "59371873487402651110657306418818354906476102545298559461791300717696053835454";
let signerRy = "98322875246066710654579302898391677189379767946198239290895789444110962324342";
let blindRes = blind(m, signerRx, signerRy);
let signerRx = "17814783168156809976981325336969869272256267559847863501362979416582031885685";
let signerRy = "30466749656160766323378925376290982172805224557687141285291181575233995759897";
let blindRes = wasmBlind(m, signerRx, signerRy);
console.log("blind", blindRes);
// Q & sBlind would be received from the Signer
let signerQx = "26613296432153871833441195158297038913673464785502568519907582377915678491093";
let signerQy = "81940194042971427014176158889809922552127995083760111384335138546589994227275";
let sBlind = "7240298625621589352655632414257224668430424461224914067754717095121139699933353374227084479180038954015287518505167995306229258561275087198611946596619855";
let unblindRes = unblind(sBlind, m, blindRes.uA, blindRes.uB, blindRes.uFx, blindRes.uFy);
let signerQx = "91217724741799691300838336208439702708830781279546234509900618215893368170964";
let signerQy = "10647409378909561143830454293907272341812664755625953321604115356883317910171";
let sBlind = "1559989683738317700055715706344460781046571016142996697444777749433194958666958401306508176561868963591508234625762518936896506645022493420447764027537091595268073646775253821735958788229615883133396107736168033688269069669796190509031136746898237132145138091815479880246793211708356184248484212425679897377";
let unblindRes = wasmUnblind(sBlind, m, blindRes.uA, blindRes.uB, blindRes.uFx, blindRes.uFy);
console.log("unblind", unblindRes);
// wasmVerify method not used here because the hardcoded values would
// not match with the random generated values from the 'blind' method
// let verified = wasmVerify(m, unblindRes.s, unblindRes.fx, unblindRes.fy, signerQx, signerQy);
// console.log("verify", verified);
// ---
// v0
console.log("using: http://www.isecure-journal.com/article_39171_47f9ec605dd3918c2793565ec21fcd7a.pdf");
// Q & R would be received from the Signer
blindRes = blindv0(m, signerQx, signerQy, signerRx, signerRy);
blindRes = wasmBlindv0(m, signerQx, signerQy, signerRx, signerRy);
console.log("blindv0", blindRes);
// sBlind would be received from the Signer
unblindRes = unblindv0(sBlind, m, blindRes.uB, blindRes.uC, blindRes.uFx, blindRes.uFy);
unblindRes = wasmUnblindv0(sBlind, m, blindRes.uB, blindRes.uC, blindRes.uFx, blindRes.uFy);
console.log("unblindv0", unblindRes);
// wasmVerifyv0 method not used here because the hardcoded values would
// not match with the random generated values from the 'blind' method
// let verified = wasmVerifyv0(m, unblindRes.s, unblindRes.fx, unblindRes.fy, signerQx, signerQy);
// console.log("verify", verified);
}