mirror of
https://github.com/arnaucube/go-blindsecp256k1.git
synced 2026-02-06 19:16:40 +01:00
Previous to this commit there was the implementation of "[An Efficient Blind Signature Scheme Based on the Elliptic Curve Discrete Logarithm Problem](http://www.isecure-journal.com/article_39171_47f9ec605dd3918c2793565ec21fcd7a.pdf)" paper by by Morteza Nikooghadama & Ali Zakerolhosseini. This commit adds the implementation of "[New Blind Signature Schemes Based on the (Elliptic Curve) Discrete Logarithm Problem](https://sci-hub.do/10.1109/ICCKE.2013.6682844)" paper by Hamid Mala & Nafiseh Nezhadansari.
This commit is contained in:
@@ -5,6 +5,8 @@ import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"syscall/js"
|
||||
|
||||
blindsecp256k1v0 "blindsecp256k1/v0"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -15,6 +17,12 @@ func main() {
|
||||
}
|
||||
|
||||
func registerCallbacks() {
|
||||
// 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))
|
||||
|
||||
// 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))
|
||||
}
|
||||
@@ -27,6 +35,77 @@ func stringToBigInt(s string) *big.Int {
|
||||
return b
|
||||
}
|
||||
|
||||
func blindv0(this js.Value, values []js.Value) interface{} {
|
||||
mStr := values[0].String()
|
||||
signerQxStr := values[1].String()
|
||||
signerQyStr := values[2].String()
|
||||
signerRxStr := values[3].String()
|
||||
signerRyStr := values[4].String()
|
||||
|
||||
m := stringToBigInt(mStr)
|
||||
signerQx := stringToBigInt(signerQxStr)
|
||||
signerQy := stringToBigInt(signerQyStr)
|
||||
signerRx := stringToBigInt(signerRxStr)
|
||||
signerRy := stringToBigInt(signerRyStr)
|
||||
|
||||
signerQ := &blindsecp256k1v0.PublicKey{
|
||||
X: signerQx,
|
||||
Y: signerQy,
|
||||
}
|
||||
signerR := &blindsecp256k1v0.Point{
|
||||
X: signerRx,
|
||||
Y: signerRy,
|
||||
}
|
||||
|
||||
signer := &blindsecp256k1v0.SignerPublicData{signerQ, signerR}
|
||||
mBlinded, user := blindsecp256k1v0.Blind(m, signer)
|
||||
|
||||
r := make(map[string]interface{})
|
||||
r["mBlinded"] = mBlinded.String()
|
||||
r["uA"] = user.A.String()
|
||||
r["uB"] = user.B.String()
|
||||
r["uC"] = user.C.String()
|
||||
r["uC"] = user.C.String()
|
||||
r["uFx"] = user.F.X.String()
|
||||
r["uFy"] = user.F.Y.String()
|
||||
return r
|
||||
}
|
||||
|
||||
func unblindv0(this js.Value, values []js.Value) interface{} {
|
||||
sBlindStr := values[0].String()
|
||||
mStr := values[1].String()
|
||||
uBStr := values[2].String()
|
||||
uCStr := values[3].String()
|
||||
uFxStr := values[4].String()
|
||||
uFyStr := values[5].String()
|
||||
|
||||
sBlind := stringToBigInt(sBlindStr)
|
||||
m := stringToBigInt(mStr)
|
||||
uB := stringToBigInt(uBStr)
|
||||
uC := stringToBigInt(uCStr)
|
||||
uFx := stringToBigInt(uFxStr)
|
||||
uFy := stringToBigInt(uFyStr)
|
||||
|
||||
uF := &blindsecp256k1v0.Point{
|
||||
X: uFx,
|
||||
Y: uFy,
|
||||
}
|
||||
|
||||
u := &blindsecp256k1v0.UserSecretData{
|
||||
// A not needed to Unblind
|
||||
B: uB,
|
||||
C: uC,
|
||||
F: uF,
|
||||
}
|
||||
|
||||
sig := blindsecp256k1v0.Unblind(sBlind, m, u)
|
||||
|
||||
r := make(map[string]interface{})
|
||||
r["s"] = sig.S.String()
|
||||
r["fx"] = sig.F.X.String()
|
||||
r["fy"] = sig.F.Y.String()
|
||||
return r
|
||||
}
|
||||
func blind(this js.Value, values []js.Value) interface{} {
|
||||
mStr := values[0].String()
|
||||
signerQxStr := values[1].String()
|
||||
@@ -56,8 +135,6 @@ func blind(this js.Value, values []js.Value) interface{} {
|
||||
r["mBlinded"] = mBlinded.String()
|
||||
r["uA"] = user.A.String()
|
||||
r["uB"] = user.B.String()
|
||||
r["uC"] = user.C.String()
|
||||
r["uC"] = user.C.String()
|
||||
r["uFx"] = user.F.X.String()
|
||||
r["uFy"] = user.F.Y.String()
|
||||
return r
|
||||
@@ -66,15 +143,15 @@ func blind(this js.Value, values []js.Value) interface{} {
|
||||
func unblind(this js.Value, values []js.Value) interface{} {
|
||||
sBlindStr := values[0].String()
|
||||
mStr := values[1].String()
|
||||
uBStr := values[2].String()
|
||||
uCStr := values[3].String()
|
||||
uAStr := values[2].String()
|
||||
uBStr := values[3].String()
|
||||
uFxStr := values[4].String()
|
||||
uFyStr := values[5].String()
|
||||
|
||||
sBlind := stringToBigInt(sBlindStr)
|
||||
m := stringToBigInt(mStr)
|
||||
uA := stringToBigInt(uAStr)
|
||||
uB := stringToBigInt(uBStr)
|
||||
uC := stringToBigInt(uCStr)
|
||||
uFx := stringToBigInt(uFxStr)
|
||||
uFy := stringToBigInt(uFyStr)
|
||||
|
||||
@@ -84,9 +161,8 @@ func unblind(this js.Value, values []js.Value) interface{} {
|
||||
}
|
||||
|
||||
u := &blindsecp256k1.UserSecretData{
|
||||
// A not needed to Unblind
|
||||
A: uA,
|
||||
B: uB,
|
||||
C: uC,
|
||||
F: uF,
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -1,6 +1,7 @@
|
||||
function test() {
|
||||
let m = "1952805748";
|
||||
|
||||
console.log("using: https://sci-hub.do/10.1109/ICCKE.2013.6682844");
|
||||
// Q & R would be received from the Signer
|
||||
let signerQx = "26613296432153871833441195158297038913673464785502568519907582377915678491093";
|
||||
let signerQy = "81940194042971427014176158889809922552127995083760111384335138546589994227275";
|
||||
@@ -11,6 +12,16 @@ function test() {
|
||||
|
||||
// sBlind would be received from the Signer
|
||||
let sBlind = "7240298625621589352655632414257224668430424461224914067754717095121139699933353374227084479180038954015287518505167995306229258561275087198611946596619855";
|
||||
let unblindRes = unblind(sBlind, m, blindRes.uB, blindRes.uC, blindRes.uFx, blindRes.uFy);
|
||||
let unblindRes = unblind(sBlind, m, blindRes.uA, blindRes.uB, blindRes.uFx, blindRes.uFy);
|
||||
console.log("unblind", unblindRes);
|
||||
|
||||
// ---
|
||||
// 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);
|
||||
console.log("blindv0", blindRes);
|
||||
// sBlind would be received from the Signer
|
||||
unblindRes = unblindv0(sBlind, m, blindRes.uB, blindRes.uC, blindRes.uFx, blindRes.uFy);
|
||||
console.log("unblindv0", unblindRes);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user