This is an automated email from the ASF dual-hosted git repository.
cmorris pushed a commit to branch splitroles-blockchain
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git
The following commit(s) were added to refs/heads/splitroles-blockchain by this
push:
new c5c23f6 Order & transfer working
c5c23f6 is described below
commit c5c23f68fa01a8aa0652d3f6d39baf7fb1fbb896
Author: Christopher Morris <[email protected]>
AuthorDate: Wed Sep 25 17:36:12 2019 +0100
Order & transfer working
---
libs/documents/docs.go | 1 +
pkg/bitcoinplugin/helpers.go | 7 ++-----
pkg/bitcoinplugin/service.go | 2 +-
pkg/defaultservice/fulfill.go | 4 ++--
pkg/defaultservice/order.go | 43 ++++++++++++++++++++++++++++---------------
5 files changed, 34 insertions(+), 23 deletions(-)
diff --git a/libs/documents/docs.go b/libs/documents/docs.go
index ae36c11..8cc7c71 100644
--- a/libs/documents/docs.go
+++ b/libs/documents/docs.go
@@ -124,6 +124,7 @@ func Decode(rawDoc []byte, tag string, sikeSK []byte,
recipientID string, plainT
//check the message verification if we have a key for it
if sendersBlsPK != nil {
+ //if the document is locally signed check with our signature
err = Verify(signedEnvelope, sendersBlsPK)
if err != nil {
return nil, err
diff --git a/pkg/bitcoinplugin/helpers.go b/pkg/bitcoinplugin/helpers.go
index 42ed32f..b1a15f2 100644
--- a/pkg/bitcoinplugin/helpers.go
+++ b/pkg/bitcoinplugin/helpers.go
@@ -75,12 +75,9 @@ func deriveFinalPrivateKey(s *Service, order
documents.OrderDoc, beneficiariesSi
}
}
-func adhocEncryptedEnvelopeEncode(s *Service, nodeID string,
beneficiaryIDDocumentCID string, order documents.OrderDoc, blsSK []byte)
([]byte, error) {
+func adhocEncryptedEnvelopeEncode(s *Service, nodeID string, order
documents.OrderDoc, blsSK []byte) ([]byte, error) {
//Regenerate the original Princaipal Priv Key based on Order
- if beneficiaryIDDocumentCID == "" {
- //beneficiaryIDDocumentCID is empty when it was passed in the
Inital Deposit Order
- return nil, nil
- }
+ beneficiaryIDDocumentCID := order.BeneficiaryCID
seedHex, err := common.RetrieveSeed(s.Store, order.Reference)
if err != nil {
return nil, err
diff --git a/pkg/bitcoinplugin/service.go b/pkg/bitcoinplugin/service.go
index f2e3469..9c061c5 100644
--- a/pkg/bitcoinplugin/service.go
+++ b/pkg/bitcoinplugin/service.go
@@ -109,7 +109,7 @@ func (s *Service) PrepareOrderResponse(orderPart2
*documents.OrderDoc, reqExtens
// ProduceBeneficiaryEncryptedData -
func (s *Service) ProduceBeneficiaryEncryptedData(blsSK []byte, order
*documents.OrderDoc, req *api.OrderSecretRequest) (encrypted []byte, extension
map[string]string, err error) {
- enc, err := adhocEncryptedEnvelopeEncode(s, s.NodeID(),
req.BeneficiaryIDDocumentCID, *order, blsSK)
+ enc, err := adhocEncryptedEnvelopeEncode(s, s.NodeID(), *order, blsSK)
return enc, nil, err
}
diff --git a/pkg/defaultservice/fulfill.go b/pkg/defaultservice/fulfill.go
index cf19ee3..4a8c827 100644
--- a/pkg/defaultservice/fulfill.go
+++ b/pkg/defaultservice/fulfill.go
@@ -109,7 +109,7 @@ func (s *Service) FulfillOrderSecret(req
*api.FulfillOrderSecretRequest) (string
return "", err
}
- recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, nodeID)
+ recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID,
order.BeneficiaryCID)
if err != nil {
return "", err
}
@@ -142,7 +142,7 @@ func (s *Service) FulfillOrderSecret(req
*api.FulfillOrderSecretRequest) (string
chainTX := &api.BlockChainTX{
Processor: api.TXFulfillOrderSecretResponse,
SenderID: nodeID,
- RecipientID: []string{s.MasterFiduciaryNodeID()},
+ RecipientID: []string{s.MasterFiduciaryNodeID(),
order.BeneficiaryCID},
Payload: marshaledRequest,
}
return tendermint.PostToChain(chainTX, "FulfillOrderSecret")
diff --git a/pkg/defaultservice/order.go b/pkg/defaultservice/order.go
index 7fcd513..95d8697 100644
--- a/pkg/defaultservice/order.go
+++ b/pkg/defaultservice/order.go
@@ -397,15 +397,19 @@ func (s *Service) OrderSecret1(req
*api.OrderSecretRequest) (string, error) {
return "", err
}
- // localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID())
- // if err != nil {
- // return "", err
- // }
+ localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID())
+ if err != nil {
+ return "", err
+ }
- //Retrieve the order from IPFS
+ //If we already did a transfer the Order doc is self signed so, check
with own Key so we can re-process the transfer
order, err := common.RetrieveOrderFromIPFS(s.Ipfs, orderPart2CID,
sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
if err != nil {
- return "", errors.Wrap(err, "Fail to retrieve Order from IPFS")
+ //check if we are re-trying the call, so the OrderDoc is
locally signed
+ order, err = common.RetrieveOrderFromIPFS(s.Ipfs,
orderPart2CID, sikeSK, nodeID, localIDDoc.BLSPublicKey)
+ if err != nil {
+ return "", errors.Wrap(err, "Fail to retrieve Order
from IPFS")
+ }
}
if err := s.Plugin.ValidateOrderSecretRequest(req, *order); err != nil {
@@ -414,15 +418,15 @@ func (s *Service) OrderSecret1(req
*api.OrderSecretRequest) (string, error) {
//Create a piece of data that is destined for the beneficiary, passed
via the Master Fiduciary
+ if req.BeneficiaryIDDocumentCID != "" {
+ order.BeneficiaryCID = req.BeneficiaryIDDocumentCID
+ }
+
beneficiaryEncryptedData, extension, err :=
s.Plugin.ProduceBeneficiaryEncryptedData(blsSK, order, req)
if err != nil {
return "", err
}
- if req.BeneficiaryIDDocumentCID != "" {
- order.BeneficiaryCID = req.BeneficiaryIDDocumentCID
- }
-
//Create a request Object in IPFS
orderPart3CID, err := common.CreateAndStorePart3(s.Ipfs, s.Store,
order, orderPart2CID, nodeID, beneficiaryEncryptedData, recipientList)
if err != nil {
@@ -463,11 +467,20 @@ func (s *Service) OrderSecret2(req
*api.FulfillOrderSecretResponse) (string, err
return "", err
}
+ // localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID())
+ // if err != nil {
+ // return "", err
+ // }
+
//Retrieve the response Order from IPFS
orderPart4, err := common.RetrieveOrderFromIPFS(s.Ipfs,
req.OrderPart4CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
- if err != nil {
- return "", err
- }
+ // if err != nil {
+ // //check if we are re-trying the call, so the OrderDoc is
locally signed
+ // orderPart4, err = common.RetrieveOrderFromIPFS(s.Ipfs,
req.OrderPart4CID, sikeSK, nodeID, localIDDoc.BLSPublicKey)
+ // if err != nil {
+ // return "", errors.Wrap(err, "Fail to retrieve Order
from IPFS")
+ // }
+ // }
var beneficiariesSikeSK []byte
var beneficiaryCID string
@@ -496,8 +509,8 @@ func (s *Service) OrderSecret2(req
*api.FulfillOrderSecretResponse) (string, err
//Write the requests to the chain
chainTX := &api.BlockChainTX{
Processor: api.TXOrderSecretResponse, //NONE
- SenderID: nodeID,
- RecipientID: []string{s.MasterFiduciaryNodeID()},
+ SenderID: "", // so we can view it
+ RecipientID: []string{beneficiaryCID},
Payload: marshaledRequest,
}
//curl --data-binary
'{"jsonrpc":"2.0","id":"anything","method":"broadcast_tx_commit","params":
{"tx": "YWFhcT1hYWFxCg=="}}' -H 'content-type:text/plain;'
http://localhost:26657