This is an automated email from the ASF dual-hosted git repository. smihaylov pushed a commit to branch tendermint in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git
commit a8be7565035b80d8ca9f13b3598ab17db6913d5f Merge: eb7e448 6bc9bc4 Author: Stanislav Mihaylov <[email protected]> AuthorDate: Thu Oct 3 17:30:09 2019 +0300 Merge the develop branch .travis.yml | 17 +++ Dockerfile | 17 +++ Dockerfile-alpine | 17 +++ build-static.sh | 18 +++ build.sh | 19 +++ cmd/service/commands.go | 1 + cmd/service/initnode.go | 50 -------- cmd/service/main.go | 55 ++++----- cmd/servicetester/e2e_test.sh | 134 +++++++++++++--------- cmd/servicetester/fulltest.sh | 18 +++ cmd/servicetester/id_test.sh | 19 +++ go.mod | 4 +- go.sum | 59 +++------- libs/crypto/bench_test.go | 17 +++ libs/crypto/libpqnist/CMakeLists.txt | 17 +++ libs/crypto/libpqnist/CPackConfig.cmake | 17 +++ libs/crypto/libpqnist/cmake_uninstall.cmake.in | 17 +++ libs/crypto/libpqnist/examples/CMakeLists.txt | 17 +++ libs/crypto/libpqnist/include/CMakeLists.txt | 17 +++ libs/crypto/libpqnist/src/CMakeLists.txt | 17 +++ libs/crypto/libpqnist/test/smoke/CMakeLists.txt | 17 +++ libs/documents/build | 17 +++ libs/documents/crypto.go | 2 +- libs/documents/docs.go | 21 ++-- libs/documents/docs.proto | 19 +++ libs/documents/docs_test.go | 19 ++- libs/keystore/filestore.go | 111 ++++++++++++++++++ libs/keystore/filestore_test.go | 85 ++++++++++++++ libs/keystore/keystore.go | 36 ++++++ libs/keystore/memorystore.go | 59 ++++++++++ libs/keystore/memorystore_test.go | 46 ++++++++ libs/transport/http.go | 12 +- lint.sh | 19 +++ open-api.yaml | 17 +++ pkg/bitcoinplugin/helpers.go | 2 +- pkg/bitcoinplugin/open-api.yaml | 17 +++ pkg/bitcoinplugin/service.go | 4 +- pkg/common/common.go | 49 +------- pkg/defaultservice/identity.go | 146 ------------------------ pkg/defaultservice/init.go | 102 +++++++++++++++++ pkg/defaultservice/order.go | 19 ++- pkg/defaultservice/service.go | 19 +-- pkg/endpoints/endpoints.go | 122 ++++---------------- pkg/identity/identity.go | 121 ++++++++++++++++++++ pkg/identity/identity_test.go | 47 ++++++++ pkg/identity/keys.go | 63 ++++++++++ pkg/safeguardsecret/README.md | 19 +++ pkg/service/service.go | 15 ++- plugins/plugin.go | 9 +- test.sh | 17 +++ 50 files changed, 1270 insertions(+), 528 deletions(-) diff --cc cmd/service/main.go index 286460c,7e6a8ef..41bb4a3 --- a/cmd/service/main.go +++ b/cmd/service/main.go @@@ -34,9 -36,11 +36,11 @@@ import "github.com/apache/incubator-milagro-dta/libs/ipfs" "github.com/apache/incubator-milagro-dta/libs/logger" "github.com/apache/incubator-milagro-dta/libs/transport" - "github.com/apache/incubator-milagro-dta/pkg/api" "github.com/apache/incubator-milagro-dta/pkg/config" + "github.com/apache/incubator-milagro-dta/pkg/defaultservice" "github.com/apache/incubator-milagro-dta/pkg/endpoints" + "github.com/apache/incubator-milagro-dta/pkg/identity" + "github.com/apache/incubator-milagro-dta/pkg/tendermint" "github.com/apache/incubator-milagro-dta/plugins" "github.com/go-kit/kit/metrics/prometheus" "github.com/pkg/errors" @@@ -224,15 -232,8 +227,15 @@@ func startDaemon(args []string) error logger.Info("NODE ID (IPFS): %v", svcPlugin.NodeID()) logger.Info("Node Type: %v", strings.ToLower(cfg.Node.NodeType)) - endpoints := endpoints.Endpoints(svcPlugin, cfg.HTTP.CorsAllow, authorizer, logger, cfg.Node.NodeType) + endpoints := endpoints.Endpoints(svcPlugin, cfg.HTTP.CorsAllow, authorizer, logger, cfg.Node.NodeType, svcPlugin) httpHandler := transport.NewHTTPHandler(endpoints, logger, duration) + + //Connect to Blockchain - Tendermint + go tendermint.Subscribe(svcPlugin, store, logger, cfg.Node.NodeID, cfg.HTTP.ListenAddr) + if err != nil { + return errors.Wrap(err, "init Tendermint Blockchain") + } + // Start the application http server go func() { logger.Info("starting listener on %v, custody server %v", cfg.HTTP.ListenAddr, cfg.Node.MasterFiduciaryServer) diff --cc go.mod index 6225b74,b63bedf..7e0150c --- a/go.mod +++ b/go.mod @@@ -1,11 -1,11 +1,13 @@@ module github.com/apache/incubator-milagro-dta require ( + github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296 + github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17 + github.com/VividCortex/gohistogram v1.0.0 // indirect + github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d github.com/coreos/go-oidc v2.0.0+incompatible - github.com/go-kit/kit v0.8.0 + github.com/go-kit/kit v0.9.0 github.com/go-playground/locales v0.12.1 // indirect github.com/go-playground/universal-translator v0.16.0 // indirect github.com/go-test/deep v1.0.2 diff --cc go.sum index 58ea010,dfb1954..1ee5995 --- a/go.sum +++ b/go.sum @@@ -13,11 -12,8 +12,13 @@@ github.com/StackExchange/wmi v0.0.0-201 github.com/Stebalien/go-bitfield v0.0.0-20180330043415-076a62f9ce6e/go.mod h1:3oM7gXIttpYDAJXpVNnSCiUMYBLIZ6cb1t+Ip982MRo= github.com/Stebalien/go-bitfield v0.0.1 h1:X3kbSSPUaJK60wV2hjOPZwmpljr6VGCqdq4cBLhbQBo= github.com/Stebalien/go-bitfield v0.0.1/go.mod h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s= +github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296 h1:JYWTroLXcNzSCgu66NMgdjwoMHQRbv2SoOVNFb4kRkE= +github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296/go.mod h1:VSw57q4QFiWDbRnjdX8Cb3Ow0SFncRw+bA/ofY6Q83w= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/Workiva/go-datastructures v1.0.50/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= + github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= + github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@@ -29,12 -25,12 +30,14 @@@ github.com/bifurcation/mint v0.0.0-2018 github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d h1:QgeLLoPD3kRVmeu/1al9iIpIANMi9O1zXFm8BnYGCJg= github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d/go.mod h1:Jbj8eKecMNwf0KFI75skSUZqMB4UCRcndUScVBTWyUI= +github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= - github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17 h1:m0N5Vg5nP3zEz8TREZpwX3gt4Biw3/8fbIf4A3hO96g= github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= + github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 h1:A/EVblehb75cUgXA5njHPn0kLAsykn6mJGz7rnmW5W0= + github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= + github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@@ -48,10 -48,8 +55,9 @@@ github.com/cenkalti/backoff v2.1.1+inco github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= - github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927 h1:SKI1/fuSdodxmNNyVBR8d7X/HuLnRpvvFO0AgyQk764= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.0.0+incompatible h1:+RStIopZ8wooMx+Vs5Bt8zMXxV1ABl5LbakNExNmZIg= @@@ -74,36 -67,17 +80,34 @@@ github.com/davecgh/go-spew v1.1.1/go.mo github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= - github.com/dgraph-io/badger v1.6.0-rc1 h1:JphPpoBZJ3WHha133BGYlQqltSGIhV+VsEID0++nN9A= github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= - github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= - github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302/go.mod h1:qBlWZqWeVx9BjvqBsnC/8RUlAYpIFmPvgROcw0n1scE= +github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= +github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 h1:BBso6MBKW8ncyZLv37o+KNyy0HrrHgfnOaGQC2qvN+A= github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fd/go-nat v1.0.0/go.mod h1:BTBu/CKvMmOMUPkKVef1pngt2WFH/lg7E6yQnulfp6E= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI= + github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= @@@ -142,14 -113,9 +145,13 @@@ github.com/gobwas/glob v0.2.3/go.mod h1 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= - github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= @@@ -178,14 -140,9 +180,13 @@@ github.com/golangci/misspell v0.0.0-201 github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= - github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@@ -349,18 -289,17 +341,20 @@@ github.com/jbenet/go-temp-err-catcher v github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= github.com/jbenet/goprocess v0.1.3 h1:YKyIEECS/XvcfHtBzxtjBBbWK+MbvA6dG8ASiqwvr10= github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= + github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89 h1:12K8AlpT0/6QUXSfV0yi4Q0jkbq8NDtIKFtF61AoqV0= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= + github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= - github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= + github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= @@@ -659,20 -580,12 +645,16 @@@ github.com/shirou/gopsutil v0.0.0-20180 github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= - github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= - github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa h1:E+gaaifzi2xF65PbDmuKI3PhLWY6G5opMLniFq8vmXA= github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= - github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a h1:/eS3yfGjQKG+9kayBkj0ip1BGhq6zJ3eaVksphxAaek= github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= - github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= @@@ -776,10 -669,7 +756,8 @@@ go.uber.org/fx v1.9.0/go.mod h1:mFdUyAU go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go4.org v0.0.0-20190218023631-ce4c26f7be8e/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= - go4.org v0.0.0-20190313082347-94abd6928b1d h1:JkRdGP3zvTtTbabWSAC6n67ka30y7gOzWAah4XYJSfw= go4.org v0.0.0-20190313082347-94abd6928b1d/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@@ -864,10 -746,8 +841,9 @@@ golang.org/x/tools v0.0.0-2019031121294 golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190909030654-5b82db07426d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190212162355-a5947ffaace3/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= - golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522 h1:bhOzK9QyoD0ogCnFro1m2mz41+Ib0oOhfJnBp5MR4K4= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@@ -897,11 -768,8 +870,9 @@@ gopkg.in/gemnasium/logrus-airbrake-hook gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.29.1 h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --cc pkg/common/common.go index 38db9dd,03f815a..4e8220b --- a/pkg/common/common.go +++ b/pkg/common/common.go @@@ -117,53 -100,98 +105,22 @@@ func RetrieveSeed(store *datastore.Stor return seedHex, nil } -// CreateAndStoreOrderPart2 - -func CreateAndStoreOrderPart2(ipfs ipfs.Connector, store *datastore.Store, keyStore keystore.Store, order *documents.OrderDoc, orderPart1CID, commitmentPublicKey, nodeID string, recipients map[string]*documents.IDDoc) (orderPart2CID string, err error) { - Part2 := documents.OrderPart2{ - CommitmentPublicKey: commitmentPublicKey, - PreviousOrderCID: orderPart1CID, - Timestamp: time.Now().Unix(), - } - order.OrderPart2 = &Part2 - //Write the updated doc back to IPFS - orderPart2CID, err = WriteOrderToIPFS(nodeID, ipfs, store, keyStore, nodeID, order, recipients) - if err != nil { - return "", err - } - return orderPart2CID, nil -} - -// CreateAndStorePart3 adds part 3 "redemption request" to the order doc -func CreateAndStorePart3(ipfs ipfs.Connector, store *datastore.Store, keyStore keystore.Store, order *documents.OrderDoc, orderPart2CID, nodeID string, beneficiaryEncryptedData []byte, recipients map[string]*documents.IDDoc) (orderPart3CID string, err error) { - //Add part 3 "redemption request" to the order doc - redemptionRequest := documents.OrderPart3{ - //TODO - Redemption: "SignedReferenceNumber", - PreviousOrderCID: orderPart2CID, - BeneficiaryEncryptedData: beneficiaryEncryptedData, - Timestamp: time.Now().Unix(), - } - order.OrderPart3 = &redemptionRequest - //Write the updated doc back to IPFS - orderPart3CID, err = WriteOrderToIPFS(nodeID, ipfs, store, keyStore, nodeID, order, recipients) - if err != nil { - return "", nil - } - return orderPart3CID, nil -} - -// CreateAndStoreOrderPart4 - -func CreateAndStoreOrderPart4(ipfs ipfs.Connector, store *datastore.Store, keyStore keystore.Store, order *documents.OrderDoc, commitmentPrivateKey, orderPart3CID, nodeID string, recipients map[string]*documents.IDDoc) (orderPart4CID string, err error) { - Part4 := documents.OrderPart4{ - Secret: commitmentPrivateKey, - PreviousOrderCID: orderPart3CID, - Timestamp: time.Now().Unix(), - } - order.OrderPart4 = &Part4 - //Write the updated doc back to IPFS - orderPart4CID, err = WriteOrderToIPFS(nodeID, ipfs, store, keyStore, nodeID, order, recipients) - if err != nil { - return "", nil - } - return orderPart4CID, nil -} - -// WriteOrderToIPFS writes the order document to IPFS network -func WriteOrderToIPFS(nodeID string, ipfs ipfs.Connector, store *datastore.Store, keyStore keystore.Store, id string, order *documents.OrderDoc, recipients map[string]*documents.IDDoc) (ipfsAddress string, err error) { // Get the secret keys - seed, err := keyStore.Get("seed") - if err != nil { - return "", errors.New("load secrets") - } - _, blsSecretKey, err := identity.GenerateBLSKeys(seed) - if err != nil { - return "", err - } - - rawDoc, err := documents.EncodeOrderDocument(nodeID, *order, blsSecretKey, recipients) - if err != nil { - return "", errors.Wrap(err, "Failed to encode IDDocument") - } - ipfsAddress, err = ipfs.Add(rawDoc) - if err != nil { - return "", errors.Wrap(err, "Failed to Save Raw Document into IPFS") - } - - if err := store.Set("order", order.Reference, ipfsAddress, map[string]string{"time": time.Now().UTC().Format(time.RFC3339)}); err != nil { - return "", errors.New("Save Order to store") +func WriteOrderToStore(store *datastore.Store, orderReference string, address string) error { + if err := store.Set("order", orderReference, address, map[string]string{"time": time.Now().UTC().Format(time.RFC3339)}); err != nil { + return errors.New("Save Order to store") } - return ipfsAddress, nil + return nil } - //InitECKeys - generate EC keys using BIP44 HD Wallets (as bitcoin) from seed - func InitECKeys(seed []byte) ([]byte, error) { - //EC ADD Keypair Protocol - _, pubKeyECADD, _, err := cryptowallet.Bip44Address(seed, cryptowallet.CoinTypeBitcoinMain, 0, 0, 0) - if err != nil { - return nil, errors.Wrap(err, "Failed to derive EC HD Wallet Key") - } - return pubKeyECADD.SerializeCompressed(), nil - } - - // RetrieveIdentitySecrets gets the secrets for the node ID - func RetrieveIdentitySecrets(store *datastore.Store, nodeID string) (name string, seed []byte, blsSK []byte, sikeSK []byte, err error) { - var idSecrets = &IdentitySecrets{} - if err := store.Get("id-doc", nodeID, idSecrets); err != nil { - return "", nil, nil, nil, err - } - seed, err = hex.DecodeString(idSecrets.Seed) - if err != nil { - return "", nil, nil, nil, err - } - blsSK, err = hex.DecodeString(idSecrets.BLSSecretKey) - if err != nil { - return "", nil, nil, nil, err - } - sikeSK, err = hex.DecodeString(idSecrets.SikeSecretKey) - if err != nil { - return "", nil, nil, nil, err - } - return idSecrets.Name, seed, blsSK, sikeSK, nil - } - // BuildRecipientList builds a list of recipients who are able to decrypt the encrypted envelope -func BuildRecipientList(ipfs ipfs.Connector, localNodeDocCID, remoteNodeDocCID string) (map[string]*documents.IDDoc, error) { - remoteNodeDoc, err := RetrieveIDDocFromIPFS(ipfs, remoteNodeDocCID) - if err != nil { - return nil, err - } - - localNodeDoc, err := RetrieveIDDocFromIPFS(ipfs, localNodeDocCID) - if err != nil { - return nil, err - } - - recipients := map[string]*documents.IDDoc{ - remoteNodeDocCID: remoteNodeDoc, - localNodeDocCID: localNodeDoc, +func BuildRecipientList(ipfs ipfs.Connector, IDDocs ...string) (map[string]documents.IDDoc, error) { + recipients := make(map[string]documents.IDDoc) + for _, v := range IDDocs { + iddoc, err := RetrieveIDDocFromIPFS(ipfs, v) + if err != nil { + return nil, err + } + recipients[v] = iddoc } return recipients, nil } diff --cc pkg/defaultservice/order.go index 4f9c87f,bafd24c..acc6a6d --- a/pkg/defaultservice/order.go +++ b/pkg/defaultservice/order.go @@@ -26,7 -25,7 +26,8 @@@ import "github.com/apache/incubator-milagro-dta/libs/documents" "github.com/apache/incubator-milagro-dta/pkg/api" "github.com/apache/incubator-milagro-dta/pkg/common" + "github.com/apache/incubator-milagro-dta/pkg/identity" + "github.com/apache/incubator-milagro-dta/pkg/tendermint" "github.com/pkg/errors" ) @@@ -184,76 -217,76 +190,85 @@@ func (s *Service) OrderSecret1(req *api } remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.MasterFiduciaryNodeID()) if err != nil { - return nil, err + return "", err } - _, _, blsSK, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID) + // SIKE and BLS keys + keyseed, err := s.KeyStore.Get("seed") + if err != nil { + return nil, err + } + _, sikeSK, err := identity.GenerateSIKEKeys(keyseed) + if err != nil { + return nil, err + } + _, blsSK, err := identity.GenerateBLSKeys(keyseed) if err != nil { - return nil, err + return "", err } - //Retrieve the order from IPFS - order, err := common.RetrieveOrderFromIPFS(s.Ipfs, orderPart2CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey) + localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID()) if err != nil { - return nil, errors.Wrap(err, "Fail to retrieve Order from IPFS") + return "", err } - // TODO: Split Beneficiary and Principal - beneficiariesSeed := keyseed - beneficiariesSikeSK := sikeSK - - if err := s.Plugin.ValidateOrderSecretRequest(req, *order); err != nil { - return nil, err + tx, err := tendermint.TXbyHash(previousOrderHash) + if err != nil { + return "", err } - //Create a piece of data that is destined for the beneficiary, passed via the Master Fiduciary + _ = tx - beneficiaryEncryptedData, extension, err := s.Plugin.ProduceBeneficiaryEncryptedData(blsSK, order, req) + order := &documents.OrderDoc{} + err = documents.DecodeOrderDocument(tx.Payload, previousOrderHash, order, sikeSK, nodeID, remoteIDDoc.BLSPublicKey) if err != nil { - return nil, err + err = documents.DecodeOrderDocument(tx.Payload, previousOrderHash, order, sikeSK, nodeID, localIDDoc.BLSPublicKey) + if err != nil { + return "", errors.Wrap(err, "Fail to retrieve existing order") + } } - //Create a request Object in IPFS - orderPart3CID, err := common.CreateAndStorePart3(s.Ipfs, s.Store, s.KeyStore, order, orderPart2CID, nodeID, beneficiaryEncryptedData, recipientList) - if err != nil { - return nil, err + //Populate extension fields + if order.OrderSecretReqExtension == nil { + order.OrderSecretReqExtension = make(map[string]string) } - - //Post the address of the updated doc to the custody node - request := &api.FulfillOrderSecretRequest{ - SenderDocumentCID: nodeID, - OrderPart3CID: orderPart3CID, - Extension: extension, + for key, value := range req.Extension { + order.OrderSecretReqExtension[key] = value } - response, err := s.MasterFiduciaryServer.FulfillOrderSecret(request) - if err != nil { - return nil, err + + if err := s.Plugin.ValidateOrderSecretRequest(req, *order); err != nil { + return "", err } - //Retrieve the response Order from IPFS - orderPart4, err := common.RetrieveOrderFromIPFS(s.Ipfs, response.OrderPart4CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey) - if err != nil { - return nil, err + if req.BeneficiaryIDDocumentCID != "" { + order.BeneficiaryCID = req.BeneficiaryIDDocumentCID } - finalPrivateKey, finalPublicKey, ext, err := s.Plugin.ProduceFinalSecret(beneficiariesSeed, beneficiariesSikeSK, order, orderPart4, req, response) + //Create a piece of data that is destined for the beneficiary, passed via the Master Fiduciary + beneficiaryEncryptedData, _, err := s.Plugin.ProduceBeneficiaryEncryptedData(blsSK, order, req) if err != nil { - return nil, err + return "", err } - return &api.OrderSecretResponse{ - Secret: finalPrivateKey, - Commitment: finalPublicKey, - OrderReference: order.Reference, - Extension: ext, - }, nil + //Create a request Object in IPFS + order.OrderPart3 = &documents.OrderPart3{ + Redemption: "SignedReferenceNumber", + PreviousOrderCID: previousOrderHash, + BeneficiaryEncryptedData: beneficiaryEncryptedData, + Timestamp: time.Now().Unix(), + } + + txHash, payload, err := common.CreateTX(nodeID, s.Store, nodeID, order, recipientList) + + //Write the requests to the chain + chainTX := &api.BlockChainTX{ + Processor: api.TXFulfillOrderSecretRequest, + SenderID: nodeID, + RecipientID: s.MasterFiduciaryNodeID(), + AdditionalRecipientIDs: []string{}, + Payload: payload, + Tags: map[string]string{"reference": order.Reference, "txhash": hex.EncodeToString(txHash)}, + } + tendermint.PostToChain(chainTX, "OrderSecret1") + return order.Reference, nil } diff --cc pkg/defaultservice/service.go index 1260a89,b1787a3..9299b92 --- a/pkg/defaultservice/service.go +++ b/pkg/defaultservice/service.go @@@ -27,13 -25,11 +27,15 @@@ import "time" "github.com/apache/incubator-milagro-dta/libs/datastore" + "github.com/apache/incubator-milagro-dta/libs/documents" "github.com/apache/incubator-milagro-dta/libs/ipfs" + "github.com/apache/incubator-milagro-dta/libs/keystore" "github.com/apache/incubator-milagro-dta/libs/logger" + "github.com/apache/incubator-milagro-dta/libs/transport" "github.com/apache/incubator-milagro-dta/pkg/api" + "github.com/apache/incubator-milagro-dta/pkg/common" + "github.com/apache/incubator-milagro-dta/pkg/config" + "github.com/hokaccha/go-prettyjson" ) var ( @@@ -48,7 -44,9 +50,8 @@@ type Service struct Logger *logger.Logger Rng io.Reader Store *datastore.Store + KeyStore keystore.Store Ipfs ipfs.Connector - MasterFiduciaryServer api.ClientService nodeID string masterFiduciaryNodeID string } @@@ -115,26 -100,7 +105,29 @@@ func (s *Service) Status(apiVersion, no }, nil } +//Dump - used for debugging purpose, print the entire Encrypted Transaction +func (s *Service) Dump(tx *api.BlockChainTX) error { + nodeID := s.NodeID() + txHashString := hex.EncodeToString(tx.TXhash) + + localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, nodeID) + if err != nil { + return err + } + + _, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID) + if err != nil { + return err + } + + order := &documents.OrderDoc{} + err = documents.DecodeOrderDocument(tx.Payload, txHashString, order, sikeSK, nodeID, localIDDoc.BLSPublicKey) + + pp, _ := prettyjson.Marshal(order) + fmt.Println(string(pp)) + + return nil + // Endpoints for extending the plugin endpoints + func (s *Service) Endpoints() (namespace string, endpoints transport.HTTPEndpoints) { + return s.Name(), nil } diff --cc pkg/endpoints/endpoints.go index d972829,b1f7d9d..cdf530b --- a/pkg/endpoints/endpoints.go +++ b/pkg/endpoints/endpoints.go @@@ -45,55 -45,12 +45,13 @@@ var ) // Endpoints returns all the exported endpoints - func Endpoints(svc service.Service, corsAllow string, authorizer transport.Authorizer, logger *logger.Logger, nodeType string) transport.HTTPEndpoints { - identityEndpoints := transport.HTTPEndpoints{ - "CreateIdentity": { - Path: "/" + apiVersion + "/identity", - Method: http.MethodPost, - Endpoint: MakeCreateIdentityEndpoint(svc), - NewRequest: func() interface{} { return &api.CreateIdentityRequest{} }, - NewResponse: func() interface{} { return &api.CreateIdentityResponse{} }, - Options: transport.ServerOptions( - transport.SetCors(corsAllow), - transport.AuthorizeOIDC(authorizer, false), - ), - ErrStatus: transport.ErrorStatus{ - transport.ErrInvalidRequest: http.StatusUnprocessableEntity, - }, - }, - "GetIdentity": { - Path: "/" + apiVersion + "/identity/{IDDocumentCID}", - Method: http.MethodGet, - Endpoint: MakeGetIdentityEndpoint(svc), - NewResponse: func() interface{} { return &api.GetIdentityResponse{} }, - Options: transport.ServerOptions( - transport.SetCors(corsAllow), - transport.AuthorizeOIDC(authorizer, false), - ), - ErrStatus: transport.ErrorStatus{ - transport.ErrInvalidRequest: http.StatusUnprocessableEntity, - }, - }, - "IdentityList": { - Path: "/" + apiVersion + "/identity", - Method: http.MethodGet, - Endpoint: MakeIdentityListEndpoint(svc), - NewResponse: func() interface{} { return &api.IdentityListResponse{} }, - Options: transport.ServerOptions( - transport.SetCors(corsAllow), - transport.AuthorizeOIDC(authorizer, false), - ), - ErrStatus: transport.ErrorStatus{ - transport.ErrInvalidRequest: http.StatusUnprocessableEntity, - }, - }, - } + func Endpoints(svc service.Service, corsAllow string, authorizer transport.Authorizer, logger *logger.Logger, nodeType string, pluginEndpoints service.Endpoints) transport.HTTPEndpoints { principalEndpoints := transport.HTTPEndpoints{ - "Order": { - Path: "/" + apiVersion + "/order", + + "Order1": { + Path: "/" + apiVersion + "/order1", Method: http.MethodPost, - Endpoint: MakeOrderEndpoint(svc), + Endpoint: MakeOrder1Endpoint(svc), NewRequest: func() interface{} { return &api.OrderRequest{} }, NewResponse: func() interface{} { return &api.OrderResponse{} }, Options: transport.ServerOptions( diff --cc pkg/service/service.go index b1b2d72,f0ed3d4..1949ed0 --- a/pkg/service/service.go +++ b/pkg/service/service.go @@@ -47,10 -46,9 +45,15 @@@ type Service interface //System Status(apiVersion, nopdeType string) (*api.StatusResponse, error) + + //Blockchain transactions + Dump(tx *api.BlockChainTX) error //Decrypt and dump the order for debugging purposes. + OrderSecret2(tx *api.BlockChainTX) (string, error) + FulfillOrderSecret(tx *api.BlockChainTX) (string, error) + Order2(tx *api.BlockChainTX) (string, error) } + + // Endpoints interface to register plugin specific endpoints + type Endpoints interface { + Endpoints() (namespace string, endpoints transport.HTTPEndpoints) + }
