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

Reply via email to