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 GetServer(w http.ResponseWriter, r *http.Request) {
|
|
color.Green(config.ServerIDSigner)
|
|
fmt.Println(string(config.ServerIDSigner))
|
|
fmt.Fprintln(w, string(config.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)
|
|
}
|
|
}
|
|
*/
|
|
|
|
//get the serverIDsigner pubK
|
|
serverPubK := getServerPubK("http://" + config.ServerIDSigner)
|
|
|
|
//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, serverPubK)
|
|
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+"/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)
|
|
|
|
//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 {
|
|
color.Green(k.PubK)
|
|
color.Blue(packPubK)
|
|
if k.PubK == packPubK {
|
|
iKey = i
|
|
//save to k the key updated
|
|
keys[i].PubKSigned = ownrsa.ArrayIntToString(mSigned, "_")
|
|
keys[i].Verified = verified
|
|
keys[i].UnblindedSig = ownrsa.ArrayIntToString(mSigned, "_")
|
|
}
|
|
fmt.Println(keys[i])
|
|
}
|
|
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)
|
|
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))
|
|
}
|