Skip to content

Commit

Permalink
Add identity support
Browse files Browse the repository at this point in the history
  • Loading branch information
Asherda committed Sep 28, 2020
1 parent ef23963 commit 56ad341
Show file tree
Hide file tree
Showing 5 changed files with 1,186 additions and 96 deletions.
70 changes: 70 additions & 0 deletions common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -321,3 +321,73 @@ func GetBlockRange(cache *BlockCache, blockOut chan<- *walletrpc.CompactBlock, e
func displayHash(hash []byte) string {
return hex.EncodeToString(parser.Reverse(hash))
}

func GetIdentity(request *walletrpc.GetIdentityRequest) (*walletrpc.GetIdentityResponse, error) {

params := make([]json.RawMessage, 1)
params[0] = json.RawMessage("\"" + request.GetIdentity() + "\"")
result, rpcErr := RawRequest("getidentity", params)

if rpcErr != nil {
return nil, rpcErr
}

response := &walletrpc.GetIdentityResponse{}
err := json.Unmarshal(result, &response.Identityinfo)

if err != nil {
return nil, errors.Wrap(err, "error reading JSON response")
}

return response, nil
}

func VerifyMessage(request *walletrpc.VerifyMessageRequest) (*walletrpc.VerifyMessageResponse, error) {
params := make([]json.RawMessage, 4)
params[0] = json.RawMessage("\"" + request.Signer + "\"")
params[1] = json.RawMessage("\"" + request.Signature + "\"")
params[2] = json.RawMessage("\"" + request.Message + "\"")
params[3] = json.RawMessage("\"" + strconv.FormatBool(request.Checklatest) + "\"")

result, rpcErr := RawRequest("verifymessage", params)

if rpcErr != nil {
return nil, rpcErr
}

var signatureisvalid bool
err := json.Unmarshal(result, &signatureisvalid)

if err != nil {
return nil, errors.Wrap(err, "error reading JSON response")
}

return &walletrpc.VerifyMessageResponse{
Signatureisvalid: signatureisvalid,
}, err
}

func VerifyHash(request *walletrpc.VerifyHashRequest) (*walletrpc.VerifyHashResponse, error) {
params := make([]json.RawMessage, 4)
params[0] = json.RawMessage("\"" + request.Signer + "\"")
params[1] = json.RawMessage("\"" + request.Signature + "\"")
params[2] = json.RawMessage("\"" + request.Hash + "\"")
params[3] = json.RawMessage("\"" + strconv.FormatBool(request.Checklatest) + "\"")

result, rpcErr := RawRequest("verifyhash", params)

if rpcErr != nil {
return nil, rpcErr
}

var signatureisvalid bool
err := json.Unmarshal(result, &signatureisvalid)

if err != nil {
return nil, errors.Wrap(err, "error reading JSON response")
}

return &walletrpc.VerifyHashResponse{
Signatureisvalid: signatureisvalid,
}, err
}
56 changes: 56 additions & 0 deletions frontend/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,62 @@ func (s *lwdStreamer) Ping(ctx context.Context, in *walletrpc.Duration) (*wallet
return &response, nil
}

func (s *lwdStreamer) GetIdentity(ctx context.Context, request *walletrpc.GetIdentityRequest) (*walletrpc.GetIdentityResponse, error) {
result, rpcErr := common.GetIdentity(request)

if rpcErr != nil {
common.Log.Errorf("UpdateIdentity error: %s", rpcErr.Error())
return nil, errors.New((strings.Split(rpcErr.Error(), ":"))[0])
}
return result, nil
}

func (s *lwdStreamer) VerifyMessage(ctx context.Context, request *walletrpc.VerifyMessageRequest) (*walletrpc.VerifyMessageResponse, error) {
// verifymessage "address or identity" "signature" "message" "checklatest"
//
// Verify a signed message
//
// Arguments:
// 1. "t-addr or identity" (string, required) The transparent address or identity that signed the message.
// 2. "signature" (string, required) The signature provided by the signer in base 64 encoding (see signmessage).
// 3. "message" (string, required) The message that was signed.
// 4. "checklatest" (bool, optional) If true, checks signature validity based on latest identity. defaults to false,
// which determines validity of signing height stored in signature.
//
// Result:
// true|false (boolean) If the signature is verified or not.
result, rpcErr := common.VerifyMessage(request)

if rpcErr != nil {
common.Log.Errorf("VerifyMessage error: %s", rpcErr.Error())
return nil, errors.New((strings.Split(rpcErr.Error(), ":"))[0])
}
return result, nil
}

func (s *lwdStreamer) VerifyHash(ctx context.Context, request *walletrpc.VerifyHashRequest) (*walletrpc.VerifyHashResponse, error) {
// verifyhash "address or identity" "signature" "hexhash" "checklatest"
//
// Verify a signed message
//
// Arguments:
// 1. "t-addr or identity" (string, required) The transparent address or identity that signed the message.
// 2. "signature" (string, required) The signature provided by the signer in base 64 encoding (see signfile).
// 3. "hexhash" (string, required) Hash of the message or file that was signed.
// 4. "checklatest" (bool, optional) If true, checks signature validity based on latest identity. defaults to false,
// which determines validity of signing height stored in signature.
//
// Result:
// true|false (boolean) If the signature is verified or not.
result, rpcErr := common.VerifyHash(request)

if rpcErr != nil {
common.Log.Errorf("VerifyHash error: %s", rpcErr.Error())
return nil, errors.New((strings.Split(rpcErr.Error(), ":"))[0])
}
return result, nil
}

// SetMetaState lets the test driver control some GetLightdInfo values.
func (s *DarksideStreamer) Reset(ctx context.Context, ms *walletrpc.DarksideMetaState) (*walletrpc.Empty, error) {
match, err := regexp.Match("\\A[a-fA-F0-9]+\\z", []byte(ms.BranchID))
Expand Down
2 changes: 1 addition & 1 deletion walletrpc/darkside.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 56ad341

Please sign in to comment.