blindsig-client-server-example/main.go
main.goRaw
1package main
2
3import (
4 "math/big"
5 "net/http"
6
7 blindsecp256k1 "github.com/arnaucube/go-blindsecp256k1"
8 "github.com/gin-gonic/gin"
9)
10
11var sk *blindsecp256k1.PrivateKey
12var secretRs = make(map[string]*big.Int)
13
14func getNewRequest(c *gin.Context) {
15 k, signerR := blindsecp256k1.NewRequestParameters()
16 key := signerR.X.String() + signerR.Y.String()
17 secretRs[key] = k
18 c.JSON(http.StatusOK, gin.H{"signerR": signerR, "signerQ": sk.Public().Point()})
19}
20
21type msgPostBlindSign struct {
22 M string `json:"m"`
23 R *blindsecp256k1.Point `json:"r"`
24}
25
26func postBlindSign(c *gin.Context) {
27 var msg msgPostBlindSign
28 c.BindJSON(&msg)
29
30 m, ok := new(big.Int).SetString(msg.M, 10)
31 if !ok {
32 c.String(http.StatusBadRequest, "can not parse m")
33 return
34 }
35
36 key := msg.R.X.String() + msg.R.Y.String()
37 if _, ok := secretRs[key]; !ok {
38 c.String(http.StatusBadRequest, "unknown R")
39 return
40 }
41 k := secretRs[key]
42 sBlind := sk.BlindSign(m, k)
43 c.JSON(http.StatusOK, gin.H{"sBlind": sBlind.String()})
44}
45
46func main() {
47 secretRs = make(map[string]*big.Int)
48 sk = blindsecp256k1.NewPrivateKey()
49
50 r := gin.Default()
51
52 r.GET("/request", getNewRequest)
53 r.POST("/blindsign", postBlindSign)
54 r.Static("/web", "./client")
55
56 r.Run(":3000")
57}