|
|
package main
import ( "bytes" "encoding/json" "fmt" "net/http" "time"
ownrsa "./ownrsa" "github.com/fatih/color" "github.com/gorilla/mux" )
//generate key pair
//blind m
//unblind m
func Index(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "serverIDsigner") }
func IDs(w http.ResponseWriter, r *http.Request) { //read the keys stored in /keys directory
keys := readKeys("keys.json") saveKeys(keys, "keys.json")
jResp, err := json.Marshal(keys) check(err) fmt.Fprintln(w, string(jResp)) } func NewID(w http.ResponseWriter, r *http.Request) { //generate RSA keys pair
newKey := ownrsa.GenerateKeyPair()
key := ownrsa.PackKey(newKey) key.Date = time.Now() fmt.Println(key)
keys := readKeys("keys.json") keys = append(keys, key) saveKeys(keys, "keys.json")
jResp, err := json.Marshal(keys) check(err) fmt.Fprintln(w, string(jResp)) }
type AskBlindSign struct { M string `json:"m"` }
func BlindAndSendToSign(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) packPubK := vars["pubK"] color.Green(packPubK)
//read the keys stored in /keys directory
keys := readKeys("keys.json")
var key ownrsa.RSA //search for complete key
for _, k := range keys { if k.PubK == packPubK { key = ownrsa.UnpackKey(k) } } //blind the key.PubK
var m []int //convert packPubK to []bytes
mBytes := []byte(packPubK) for _, byte := range mBytes { m = append(m, int(byte)) } rVal := 101 blinded := ownrsa.Blind(m, rVal, key.PubK, key.PrivK) fmt.Println(blinded)
//convert blinded to string
var askBlindSign AskBlindSign askBlindSign.M = ownrsa.ArrayIntToString(blinded, "_")
//send to the serverIDsigner the key.PubK blinded
color.Green(askBlindSign.M) body := new(bytes.Buffer) json.NewEncoder(body).Encode(askBlindSign) res, err := http.Post("http://"+config.ServerIDSigner.IP+":"+config.ServerIDSigner.Port+"/blindsign", "application/json", body) check(err) fmt.Println(res)
decoder := json.NewDecoder(res.Body) //var sigmaString string
err = decoder.Decode(&askBlindSign) if err != nil { panic(err) } defer r.Body.Close()
fmt.Println("sigmaString") fmt.Println(askBlindSign) sigma := ownrsa.StringToArrayInt(askBlindSign.M, "_") fmt.Println(sigma)
//get the serverIDsigner pubK
serverPubK := getServerPubK("http://" + config.ServerIDSigner.IP + ":" + config.ServerIDSigner.Port)
//unblind the response
mSigned := ownrsa.Unblind(sigma, rVal, serverPubK) fmt.Print("mSigned: ") fmt.Println(mSigned)
verified := ownrsa.Verify(m, mSigned, serverPubK) fmt.Println(verified)
var iKey int for i, k := range keys { if k.PubK == packPubK { iKey = i //save to k the key updated
k.PubKSigned = ownrsa.ArrayIntToString(mSigned, "_") k.Verified = verified } fmt.Println(k) } keys[iKey].PubKSigned = ownrsa.ArrayIntToString(mSigned, "_") keys[iKey].Verified = verified fmt.Println(keys) saveKeys(keys, "keys.json")
jResp, err := json.Marshal(keys) check(err) fmt.Fprintln(w, string(jResp)) }
func Verify(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) packPubK := vars["pubK"] color.Green(packPubK)
//read the keys stored in /keys directory
keys := readKeys("keys.json")
var key ownrsa.PackRSA //search for complete key
for _, k := range keys { if k.PubK == packPubK { key = k } }
//get the serverIDsigner pubK
serverPubK := getServerPubK("http://" + config.ServerIDSigner.IP + ":" + config.ServerIDSigner.Port) m := ownrsa.StringToArrayInt(key.PubK, "_") mSigned := ownrsa.StringToArrayInt(key.PubKSigned, "_")
verified := ownrsa.Verify(m, mSigned, serverPubK) fmt.Println(verified)
for _, k := range keys { if k.PubK == packPubK { //save to k the key updated
k.PubKSigned = ownrsa.ArrayIntToString(mSigned, "_") k.Verified = verified } } saveKeys(keys, "keys.json")
jResp, err := json.Marshal(keys) check(err) fmt.Fprintln(w, string(jResp)) }
|