You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@milagro.apache.org by cm...@apache.org on 2019/08/28 13:40:31 UTC

[incubator-milagro-dta] branch policy updated (c94d466 -> 28c3f2b)

This is an automated email from the ASF dual-hosted git repository.

cmorris pushed a change to branch policy
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git.


    from c94d466  Add Policy to protobuffer defs
     new 6770275  Add policy to order
     new 28c3f2b  Add policy to protobuffers and order

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 cmd/servicetester/e2e_test.sh       |  12 +-
 go.mod                              |   5 +-
 go.sum                              |  15 ++
 libs/documents/docs.pb.go           | 294 +++++++++++++++++++-----------------
 libs/documents/docs.proto           |  62 ++++----
 libs/documents/docs.validator.pb.go |  27 +++-
 libs/documents/policy_test.go       |   5 +-
 pkg/api/proto.go                    |  57 +++++++
 pkg/common/common.go                |  16 +-
 pkg/defaultservice/order.go         |   3 +-
 10 files changed, 311 insertions(+), 185 deletions(-)


[incubator-milagro-dta] 02/02: Add policy to protobuffers and order

Posted by cm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cmorris pushed a commit to branch policy
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git

commit 28c3f2b6a62d6c1023aaa24d98b7d2c877da52db
Author: Christopher Morris <ch...@morris.net>
AuthorDate: Wed Aug 28 14:34:29 2019 +0100

    Add policy to protobuffers and order
---
 cmd/servicetester/e2e_test.sh       |  11 +-
 go.mod                              |   5 +-
 go.sum                              |  15 ++
 libs/documents/docs.pb.go           | 294 +++++++++++++++++++-----------------
 libs/documents/docs.proto           |  61 ++++----
 libs/documents/docs.validator.pb.go |  27 +++-
 libs/documents/policy_test.go       |   5 +-
 pkg/api/proto.go                    |  49 +++---
 pkg/common/common.go                |  15 +-
 9 files changed, 274 insertions(+), 208 deletions(-)

diff --git a/cmd/servicetester/e2e_test.sh b/cmd/servicetester/e2e_test.sh
index d3dbbce..c84c0cc 100755
--- a/cmd/servicetester/e2e_test.sh
+++ b/cmd/servicetester/e2e_test.sh
@@ -2,7 +2,9 @@
 #End to End Test of Services using curl/bash
 
 apiVersion="v1"
-simplePolicy='{"policy":{ "example":"single fiduciary","walletRef": "CD-2367-227","beneficiarydocid":"","nodeId": "123","coin": 0,"sharingGroups": [{"groupref": "Back Office Team","threshold":1,"ids": [{"id": "alice","idType": "oidc","idRef": "Alice"}]}],"participantCount": 7}}'
+simplePolicy='{ "example":"single fiduciary","walletRef": "CD-2367-227","beneficiarydocid":"","nodeId": "123","coin": 0,"sharingGroups": [{"groupref": "Back Office Team","threshold":1,"ids": [{"id": "alice","idType": "oidc","idRef": "Alice"}]}],"participantCount": 7}'
+
+#simplePolicy='policy:{"example":"single fiduciary"}'
 
 status () {
   #Determine if an extension is running
@@ -23,6 +25,9 @@ status () {
 execute_bitcoin () {
   #Run 2 Tests against the Bitcoin Extension
   echo "Bitcoin Plugin Tests [2 Tests]"
+
+#  echo "http://localhost:5556/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d                "{\"policy\":$simplePolicy,\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}"
+
   output1=$(curl -s -X POST "http://localhost:5556/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"policy\":$simplePolicy,\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}")
   echo $output1
   op1=$(echo $output1 | jq .orderReference)
@@ -109,10 +114,8 @@ execute_safeguardsecret () {
 execute_milagro () {
   echo "Milagro Tests [1 Test]"
   output1=$(curl -s -X POST "http://localhost:5556/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":$identity}")
-  echo $output1
   op1=$(echo $output1 | jq .orderReference)
 
-
   commitment1=$(echo $output1 | jq .commitment)
   output2=$(curl -s -X POST "http://localhost:5556/$apiVersion/order/secret" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$op1,\"beneficiaryIDDocumentCID\":$identity}")
   commitment2=$(echo $output2 | jq .commitment)
@@ -154,7 +157,7 @@ execute_orderlist () {
   #A simple smoke test to ensure some sort of order is returned
   hasSecret=`echo $outputOrder | grep "Secret"`
 
-  if [ -z $hasSecret ]; then
+  if [ -z "$hasSecret" ]; then
       echo "Failed Order has error"
       exit 1
   else
diff --git a/go.mod b/go.mod
index 7adef26..2777869 100644
--- a/go.mod
+++ b/go.mod
@@ -1,10 +1,11 @@
 module github.com/apache/incubator-milagro-dta
 
 require (
-	github.com/VividCortex/gohistogram v1.0.0 // indirect
+	code.qredo.net/libcustody v0.1.17
 	github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17
 	github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d
 	github.com/coreos/go-oidc v2.0.0+incompatible
+	github.com/ethereum/go-ethereum v1.8.27
 	github.com/go-kit/kit v0.8.0
 	github.com/go-playground/locales v0.12.1 // indirect
 	github.com/go-playground/universal-translator v0.16.0 // indirect
@@ -27,12 +28,10 @@ require (
 	github.com/multiformats/go-multihash v0.0.5
 	github.com/mwitkow/go-proto-validators v0.0.0-20190709101305-c00cd28f239a
 	github.com/pkg/errors v0.8.1
-	github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
 	github.com/prometheus/client_golang v0.9.3
 	github.com/stretchr/testify v1.3.0
 	github.com/tyler-smith/go-bip39 v1.0.0
 	go.etcd.io/bbolt v1.3.3
-	google.golang.org/appengine v1.4.0 // indirect
 	gopkg.in/go-playground/assert.v1 v1.2.1 // indirect
 	gopkg.in/go-playground/validator.v9 v9.29.1
 	gopkg.in/square/go-jose.v2 v2.3.1 // indirect
diff --git a/go.sum b/go.sum
index 521c6f5..a7623ae 100644
--- a/go.sum
+++ b/go.sum
@@ -1,6 +1,9 @@
 bazil.org/fuse v0.0.0-20180421153158-65cc252bf669 h1:FNCRpXiquG1aoyqcIWVFmpTSKVcx2bQD38uZZeGtdlw=
 bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+code.qredo.net/libcustody v0.1.17 h1:HobIrYBS/Viv7P43C+ubD6CGdS5Ax1itLV4+fq7fJgU=
+code.qredo.net/libcustody v0.1.17/go.mod h1:jfdOca8JV9wFPaXNJ3cOr+1p0qRtoNLtgJ/uOuAi430=
 github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
 github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4=
 github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
@@ -29,10 +32,12 @@ github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnweb
 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-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8=
+github.com/btcsuite/btcd v0.0.0-20190410025418-9bfb2ca0346b/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/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
 github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
+github.com/btcsuite/btcutil v0.0.0-20190316010144-3ac1210f4b38/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=
 github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
@@ -75,6 +80,8 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8
 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/ethereum/go-ethereum v1.8.27 h1:d+gkiLaBDk5fn3Pe/xNVaMrB/ozI+AUB2IlVBp29IrY=
+github.com/ethereum/go-ethereum v1.8.27/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY=
 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/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
@@ -124,6 +131,7 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
 github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
 github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
@@ -143,6 +151,7 @@ github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlS
 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/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 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/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -150,6 +159,7 @@ 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.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
 github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
@@ -588,6 +598,7 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z
 github.com/prometheus/procfs v0.0.0-20190519111021-9935e8e0588d h1:Z5QMcUKnQw7ouB1wDuyZM6TL/rm+brJcNk6Ai8ut3zM=
 github.com/prometheus/procfs v0.0.0-20190519111021-9935e8e0588d/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY=
 github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
@@ -712,6 +723,7 @@ golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73r
 golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190310074541-c10a0554eabf/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -723,6 +735,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwL
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190319182350-c85d3e98c914 h1:jIOcLT9BZzyJ9ce+IwwZ+aF9yeCqzrR+NrD68a/SHKw=
+golang.org/x/oauth2 v0.0.0-20190319182350-c85d3e98c914/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -789,6 +803,7 @@ gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXa
 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/square/go-jose.v2 v2.3.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 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=
diff --git a/libs/documents/docs.pb.go b/libs/documents/docs.pb.go
index 51e50dd..a93e74c 100644
--- a/libs/documents/docs.pb.go
+++ b/libs/documents/docs.pb.go
@@ -7,6 +7,7 @@ import (
 	fmt "fmt"
 	_ "github.com/gogo/protobuf/gogoproto"
 	proto "github.com/golang/protobuf/proto"
+	timestamp "github.com/golang/protobuf/ptypes/timestamp"
 	_ "github.com/mwitkow/go-proto-validators"
 	math "math"
 )
@@ -709,20 +710,21 @@ func (m *PolicyWrapper) GetPolicy() *Policy {
 }
 
 type Policy struct {
-	Example              string          `protobuf:"bytes,2,opt,name=example,proto3" json:"example,omitempty"`
-	WalletRef            string          `protobuf:"bytes,3,opt,name=walletRef,proto3" json:"walletRef,omitempty"`
-	NodeId               string          `protobuf:"bytes,4,opt,name=nodeId,proto3" json:"nodeId,omitempty"`
-	Coin                 int64           `protobuf:"varint,5,opt,name=coin,proto3" json:"coin,omitempty"`
-	SharingGroups        []*SharingGroup `protobuf:"bytes,6,rep,name=sharingGroups,proto3" json:"sharingGroups,omitempty"`
-	ParticipantCount     int64           `protobuf:"varint,7,opt,name=participantCount,proto3" json:"participantCount,omitempty"`
-	Threshold            int64           `protobuf:"varint,8,opt,name=threshold,proto3" json:"threshold,omitempty"`
-	Signers              []int64         `protobuf:"varint,9,rep,packed,name=signers,proto3" json:"signers,omitempty"`
-	PublicAddress        string          `protobuf:"bytes,10,opt,name=publicAddress,proto3" json:"publicAddress,omitempty"`
-	Beneficiarydocid     string          `protobuf:"bytes,11,opt,name=beneficiarydocid,proto3" json:"beneficiarydocid,omitempty"`
-	DateTime             int64           `protobuf:"varint,12,opt,name=dateTime,proto3" json:"dateTime,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
-	XXX_unrecognized     []byte          `json:"-"`
-	XXX_sizecache        int32           `json:"-"`
+	Example              string               `protobuf:"bytes,2,opt,name=Example,json=example,proto3" json:"Example,omitempty"`
+	WalletRef            string               `protobuf:"bytes,3,opt,name=WalletRef,json=walletRef,proto3" json:"WalletRef,omitempty"`
+	NodeId               string               `protobuf:"bytes,4,opt,name=NodeId,json=nodeId,proto3" json:"NodeId,omitempty"`
+	CoinType             int64                `protobuf:"varint,5,opt,name=CoinType,json=coin,proto3" json:"CoinType,omitempty"`
+	SharingGroups        []*SharingGroup      `protobuf:"bytes,6,rep,name=SharingGroups,json=sharingGroups,proto3" json:"SharingGroups,omitempty"`
+	ParticipantCount     int64                `protobuf:"varint,7,opt,name=ParticipantCount,json=participantCount,proto3" json:"ParticipantCount,omitempty"`
+	Threshold            int64                `protobuf:"varint,8,opt,name=Threshold,json=threshold,proto3" json:"Threshold,omitempty"`
+	Signers              []int64              `protobuf:"varint,9,rep,packed,name=Signers,json=signers,proto3" json:"Signers,omitempty"`
+	PublicAddress        string               `protobuf:"bytes,10,opt,name=PublicAddress,json=publicaddress,proto3" json:"PublicAddress,omitempty"`
+	BeneficiaryDocCID    string               `protobuf:"bytes,11,opt,name=BeneficiaryDocCID,json=beneficiarydocid,proto3" json:"BeneficiaryDocCID,omitempty"`
+	UpdatedAt            *timestamp.Timestamp `protobuf:"bytes,12,opt,name=UpdatedAt,json=updatedAt,proto3" json:"UpdatedAt,omitempty"`
+	CreatedAt            *timestamp.Timestamp `protobuf:"bytes,13,opt,name=CreatedAt,json=createdAt,proto3" json:"CreatedAt,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
 }
 
 func (m *Policy) Reset()         { *m = Policy{} }
@@ -771,9 +773,9 @@ func (m *Policy) GetNodeId() string {
 	return ""
 }
 
-func (m *Policy) GetCoin() int64 {
+func (m *Policy) GetCoinType() int64 {
 	if m != nil {
-		return m.Coin
+		return m.CoinType
 	}
 	return 0
 }
@@ -813,31 +815,38 @@ func (m *Policy) GetPublicAddress() string {
 	return ""
 }
 
-func (m *Policy) GetBeneficiarydocid() string {
+func (m *Policy) GetBeneficiaryDocCID() string {
 	if m != nil {
-		return m.Beneficiarydocid
+		return m.BeneficiaryDocCID
 	}
 	return ""
 }
 
-func (m *Policy) GetDateTime() int64 {
+func (m *Policy) GetUpdatedAt() *timestamp.Timestamp {
 	if m != nil {
-		return m.DateTime
+		return m.UpdatedAt
 	}
-	return 0
+	return nil
+}
+
+func (m *Policy) GetCreatedAt() *timestamp.Timestamp {
+	if m != nil {
+		return m.CreatedAt
+	}
+	return nil
 }
 
 type SharingGroup struct {
-	Groupid              int64       `protobuf:"varint,1,opt,name=groupid,proto3" json:"groupid,omitempty"`
-	Groupref             string      `protobuf:"bytes,2,opt,name=groupref,proto3" json:"groupref,omitempty"`
-	Ids                  []*Identity `protobuf:"bytes,3,rep,name=ids,proto3" json:"ids,omitempty"`
-	Threshold            int64       `protobuf:"varint,4,opt,name=threshold,proto3" json:"threshold,omitempty"`
-	Signature            []byte      `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"`
-	TimeStamp            int64       `protobuf:"varint,6,opt,name=timeStamp,proto3" json:"timeStamp,omitempty"`
-	Status               string      `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
-	XXX_unrecognized     []byte      `json:"-"`
-	XXX_sizecache        int32       `json:"-"`
+	GroupID              int64                `protobuf:"varint,1,opt,name=GroupID,json=groupId,proto3" json:"GroupID,omitempty"`
+	GroupRef             string               `protobuf:"bytes,2,opt,name=GroupRef,json=groupref,proto3" json:"GroupRef,omitempty"`
+	IDs                  []*Identity          `protobuf:"bytes,3,rep,name=IDs,json=ids,proto3" json:"IDs,omitempty"`
+	Threshold            int64                `protobuf:"varint,4,opt,name=Threshold,json=threshold,proto3" json:"Threshold,omitempty"`
+	Signature            []byte               `protobuf:"bytes,5,opt,name=Signature,json=signature,proto3" json:"Signature,omitempty"`
+	TimeStamp            *timestamp.Timestamp `protobuf:"bytes,6,opt,name=TimeStamp,json=timeStamp,proto3" json:"TimeStamp,omitempty"`
+	Status               string               `protobuf:"bytes,7,opt,name=Status,json=status,proto3" json:"Status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
 }
 
 func (m *SharingGroup) Reset()         { *m = SharingGroup{} }
@@ -865,23 +874,23 @@ func (m *SharingGroup) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_SharingGroup proto.InternalMessageInfo
 
-func (m *SharingGroup) GetGroupid() int64 {
+func (m *SharingGroup) GetGroupID() int64 {
 	if m != nil {
-		return m.Groupid
+		return m.GroupID
 	}
 	return 0
 }
 
-func (m *SharingGroup) GetGroupref() string {
+func (m *SharingGroup) GetGroupRef() string {
 	if m != nil {
-		return m.Groupref
+		return m.GroupRef
 	}
 	return ""
 }
 
-func (m *SharingGroup) GetIds() []*Identity {
+func (m *SharingGroup) GetIDs() []*Identity {
 	if m != nil {
-		return m.Ids
+		return m.IDs
 	}
 	return nil
 }
@@ -900,11 +909,11 @@ func (m *SharingGroup) GetSignature() []byte {
 	return nil
 }
 
-func (m *SharingGroup) GetTimeStamp() int64 {
+func (m *SharingGroup) GetTimeStamp() *timestamp.Timestamp {
 	if m != nil {
 		return m.TimeStamp
 	}
-	return 0
+	return nil
 }
 
 func (m *SharingGroup) GetStatus() string {
@@ -916,15 +925,15 @@ func (m *SharingGroup) GetStatus() string {
 
 // Identity of a sharing group
 type Identity struct {
-	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	IdRef                string   `protobuf:"bytes,2,opt,name=idRef,proto3" json:"idRef,omitempty"`
-	IdType               string   `protobuf:"bytes,3,opt,name=idType,proto3" json:"idType,omitempty"`
-	Share                []byte   `protobuf:"bytes,4,opt,name=share,proto3" json:"share,omitempty"`
-	Status               string   `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
-	TimeStamp            int64    `protobuf:"varint,6,opt,name=timeStamp,proto3" json:"timeStamp,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	ID                   string               `protobuf:"bytes,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"`
+	IDRef                string               `protobuf:"bytes,2,opt,name=IDRef,json=idRef,proto3" json:"IDRef,omitempty"`
+	IDType               string               `protobuf:"bytes,3,opt,name=IDType,json=idType,proto3" json:"IDType,omitempty"`
+	Share                []byte               `protobuf:"bytes,4,opt,name=Share,json=share,proto3" json:"Share,omitempty"`
+	Status               string               `protobuf:"bytes,5,opt,name=Status,json=status,proto3" json:"Status,omitempty"`
+	TimeStamp            *timestamp.Timestamp `protobuf:"bytes,6,opt,name=TimeStamp,json=timeStamp,proto3" json:"TimeStamp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
 }
 
 func (m *Identity) Reset()         { *m = Identity{} }
@@ -952,23 +961,23 @@ func (m *Identity) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_Identity proto.InternalMessageInfo
 
-func (m *Identity) GetId() string {
+func (m *Identity) GetID() string {
 	if m != nil {
-		return m.Id
+		return m.ID
 	}
 	return ""
 }
 
-func (m *Identity) GetIdRef() string {
+func (m *Identity) GetIDRef() string {
 	if m != nil {
-		return m.IdRef
+		return m.IDRef
 	}
 	return ""
 }
 
-func (m *Identity) GetIdType() string {
+func (m *Identity) GetIDType() string {
 	if m != nil {
-		return m.IdType
+		return m.IDType
 	}
 	return ""
 }
@@ -987,11 +996,11 @@ func (m *Identity) GetStatus() string {
 	return ""
 }
 
-func (m *Identity) GetTimeStamp() int64 {
+func (m *Identity) GetTimeStamp() *timestamp.Timestamp {
 	if m != nil {
 		return m.TimeStamp
 	}
-	return 0
+	return nil
 }
 
 type PlainTestMessage1 struct {
@@ -1122,9 +1131,9 @@ func init() {
 	proto.RegisterType((*OrderPart3)(nil), "documents.OrderPart3")
 	proto.RegisterType((*OrderPart4)(nil), "documents.OrderPart4")
 	proto.RegisterType((*PolicyWrapper)(nil), "documents.PolicyWrapper")
-	proto.RegisterType((*Policy)(nil), "documents.policy")
-	proto.RegisterType((*SharingGroup)(nil), "documents.sharingGroup")
-	proto.RegisterType((*Identity)(nil), "documents.identity")
+	proto.RegisterType((*Policy)(nil), "documents.Policy")
+	proto.RegisterType((*SharingGroup)(nil), "documents.SharingGroup")
+	proto.RegisterType((*Identity)(nil), "documents.Identity")
 	proto.RegisterType((*PlainTestMessage1)(nil), "documents.PlainTestMessage1")
 	proto.RegisterType((*EncryptTestMessage1)(nil), "documents.EncryptTestMessage1")
 	proto.RegisterType((*SimpleString)(nil), "documents.SimpleString")
@@ -1133,85 +1142,90 @@ func init() {
 func init() { proto.RegisterFile("docs.proto", fileDescriptor_2a25dace11219bce) }
 
 var fileDescriptor_2a25dace11219bce = []byte{
-	// 1267 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4b, 0x6f, 0x1c, 0xc5,
-	0x13, 0xd7, 0x78, 0xec, 0x8d, 0xa7, 0xbc, 0xf6, 0xdf, 0xe9, 0x38, 0xc9, 0x28, 0xff, 0x08, 0x5b,
-	0x23, 0x83, 0x0c, 0xc2, 0x36, 0x59, 0x3b, 0x11, 0x58, 0x20, 0x14, 0xef, 0x86, 0xb0, 0xe2, 0xb5,
-	0xf4, 0x5a, 0x06, 0x29, 0x4a, 0xa4, 0xf1, 0x74, 0x79, 0xb7, 0x95, 0xdd, 0xe9, 0xd1, 0x4c, 0x6f,
-	0x92, 0x15, 0x70, 0xe6, 0xc0, 0x81, 0x03, 0x5c, 0xb9, 0x20, 0xe5, 0xca, 0x11, 0xbe, 0x00, 0x5f,
-	0x03, 0x59, 0xf8, 0x00, 0xe2, 0x13, 0xc0, 0x0d, 0xd4, 0x3d, 0xaf, 0x1e, 0xdb, 0x1b, 0xe7, 0x80,
-	0xc4, 0x9e, 0xba, 0x5e, 0xdd, 0xf5, 0xf8, 0x55, 0xd5, 0x2c, 0x00, 0x13, 0x41, 0xb2, 0x11, 0xc5,
-	0x42, 0x0a, 0xe2, 0x30, 0x11, 0x8c, 0x86, 0x18, 0xca, 0xe4, 0xda, 0xad, 0x1e, 0x97, 0xfd, 0xd1,
-	0xc1, 0x46, 0x20, 0x86, 0x9b, 0xc3, 0xc7, 0x5c, 0x3e, 0x14, 0x8f, 0x37, 0x7b, 0x62, 0x5d, 0xeb,
-	0xad, 0x3f, 0xf2, 0x07, 0x9c, 0xf9, 0x52, 0xc4, 0xc9, 0x66, 0x71, 0x4c, 0xaf, 0xb8, 0xb6, 0x6e,
-	0xd8, 0xf5, 0x44, 0x4f, 0x6c, 0x6a, 0xf6, 0xc1, 0xe8, 0x50, 0x53, 0x9a, 0xd0, 0xa7, 0x54, 0xdd,
-	0xfb, 0xca, 0x82, 0x85, 0x2e, 0xef, 0x85, 0xc8, 0xee, 0x84, 0x8f, 0x70, 0x20, 0x22, 0x24, 0xab,
-	0xe0, 0x28, 0x8e, 0x2f, 0x47, 0x31, 0xba, 0xd6, 0x8a, 0xb5, 0x56, 0xdf, 0xad, 0x1d, 0x1f, 0x2d,
-	0x4f, 0x45, 0x4b, 0xb4, 0x14, 0x90, 0x37, 0x52, 0x2d, 0x8c, 0x9b, 0xed, 0x96, 0x3b, 0xb5, 0x62,
-	0xad, 0x39, 0xbb, 0xff, 0x3f, 0x3e, 0x5a, 0xbe, 0x0a, 0x97, 0x1f, 0x7c, 0x7c, 0xef, 0xde, 0x8e,
-	0x3f, 0x08, 0x47, 0xc3, 0x9d, 0xfb, 0xf7, 0x3f, 0xdb, 0xbe, 0xf9, 0xc5, 0xea, 0xe7, 0x0f, 0x56,
-	0x69, 0xa9, 0x4d, 0x5c, 0xb8, 0xf0, 0x01, 0x26, 0x89, 0xdf, 0x43, 0xd7, 0x56, 0xd7, 0xd3, 0x9c,
-	0xf4, 0x04, 0xcc, 0x16, 0x6e, 0xbc, 0x0c, 0xb5, 0x77, 0xd1, 0x67, 0x18, 0x6b, 0x1f, 0xe6, 0x1a,
-	0x17, 0x37, 0x8a, 0xe4, 0x6c, 0xa4, 0x02, 0x9a, 0x29, 0x10, 0x02, 0xd3, 0xbb, 0x82, 0x8d, 0xb5,
-	0x1b, 0x75, 0xaa, 0xcf, 0x64, 0x15, 0xe6, 0xef, 0x84, 0x41, 0x3c, 0x8e, 0x24, 0x32, 0x2d, 0x4c,
-	0x9f, 0xaa, 0x32, 0xbd, 0xef, 0xed, 0xfc, 0x15, 0x72, 0x05, 0x6a, 0xed, 0xce, 0x3b, 0xdd, 0x76,
-	0x4b, 0xbf, 0xe7, 0xd0, 0x8c, 0x52, 0xde, 0xee, 0x63, 0x9c, 0x70, 0x11, 0xea, 0xfb, 0xa7, 0x68,
-	0x4e, 0x92, 0x57, 0x61, 0xb6, 0xe5, 0x4b, 0xdc, 0xe3, 0xc3, 0x34, 0x10, 0x7b, 0x77, 0xf1, 0xf8,
-	0x68, 0xb9, 0xbe, 0xf8, 0xf4, 0xcb, 0xdf, 0xfe, 0x98, 0x71, 0x9f, 0xfe, 0xfc, 0xe3, 0x37, 0x63,
-	0x5a, 0x68, 0x90, 0x15, 0x98, 0xeb, 0xc4, 0xf8, 0x88, 0x8b, 0x51, 0xa2, 0x52, 0x36, 0xad, 0x1f,
-	0x31, 0x59, 0xc4, 0x83, 0xba, 0x72, 0x6a, 0x6f, 0x1c, 0x61, 0x53, 0x30, 0x74, 0x67, 0xf4, 0x73,
-	0x15, 0x9e, 0xba, 0x45, 0xd1, 0xb9, 0x47, 0x35, 0xad, 0x62, 0xb2, 0xc8, 0x36, 0x5c, 0xae, 0xc4,
-	0x58, 0x5c, 0x77, 0x41, 0xeb, 0x9e, 0x2d, 0x24, 0x0d, 0x58, 0xaa, 0x08, 0xf2, 0x07, 0x66, 0xb5,
-	0xd1, 0x99, 0x32, 0xb2, 0x06, 0xff, 0xab, 0xf0, 0xdb, 0xfb, 0xae, 0xa3, 0x93, 0x7c, 0x92, 0x4d,
-	0xde, 0x04, 0xa0, 0x18, 0xf0, 0x88, 0xab, 0xea, 0xb9, 0xb0, 0x62, 0xaf, 0xcd, 0x35, 0x96, 0x8c,
-	0x7a, 0x16, 0xc2, 0x14, 0x69, 0xfd, 0x25, 0x6a, 0xe8, 0x7b, 0x3f, 0x58, 0xe0, 0x14, 0xa4, 0x59,
-	0x0f, 0xab, 0x5a, 0x8f, 0x75, 0xb0, 0x9f, 0x13, 0x8c, 0x4a, 0x2f, 0x73, 0xdf, 0x8f, 0x92, 0xd1,
-	0xc0, 0x97, 0xc8, 0xde, 0xc3, 0x1c, 0x23, 0x27, 0xd9, 0xe4, 0x05, 0x80, 0x26, 0x8f, 0xfa, 0x18,
-	0xef, 0xe1, 0x13, 0xa9, 0x2b, 0x57, 0xa7, 0x06, 0x87, 0x2c, 0xc0, 0x54, 0x7b, 0x5f, 0x97, 0xab,
-	0x4e, 0xa7, 0xda, 0xfb, 0xde, 0x5f, 0x16, 0x40, 0xbb, 0xd5, 0xca, 0xc2, 0x23, 0xaf, 0xc3, 0xd5,
-	0xdb, 0x23, 0xd9, 0xc7, 0x50, 0xf2, 0xc0, 0x97, 0x5c, 0x84, 0x14, 0x0f, 0x31, 0xc6, 0x30, 0xc0,
-	0x0c, 0x6a, 0x93, 0xc4, 0xe4, 0x16, 0x5c, 0xd9, 0xc5, 0x10, 0x0f, 0x79, 0xc0, 0xfd, 0x78, 0x7c,
-	0xa7, 0xd9, 0x19, 0x1d, 0x0c, 0x78, 0xa0, 0x3c, 0x4d, 0xa1, 0x3e, 0x41, 0xaa, 0xc0, 0xdf, 0xe5,
-	0x0f, 0xb1, 0x54, 0xcf, 0xc0, 0x5f, 0x61, 0x6a, 0xbc, 0xbd, 0xdf, 0x2d, 0x95, 0xd2, 0xc0, 0x2a,
-	0x3c, 0xb2, 0x01, 0x8e, 0x42, 0x6f, 0x22, 0xfd, 0x61, 0xa4, 0x23, 0x3c, 0x0b, 0xe4, 0xa5, 0x8a,
-	0xf7, 0xa7, 0x0d, 0xf3, 0x1f, 0xc5, 0x0c, 0xe3, 0x22, 0x7a, 0x02, 0xd3, 0x0a, 0x65, 0x59, 0xa8,
-	0xfa, 0x4c, 0x5e, 0x82, 0xe9, 0xa6, 0xe0, 0x69, 0x43, 0xd9, 0xbb, 0xe4, 0xf8, 0x68, 0x79, 0x61,
-	0xf1, 0xef, 0xfc, 0x67, 0xb9, 0xbf, 0x5f, 0xa0, 0x5a, 0x4e, 0xde, 0x86, 0x7a, 0x27, 0xe6, 0x61,
-	0xc0, 0x23, 0x7f, 0xa0, 0x4a, 0x6b, 0x9f, 0x5f, 0xda, 0x8a, 0x01, 0x69, 0xc2, 0x82, 0x91, 0xa2,
-	0xa2, 0xef, 0x9e, 0x7d, 0xc5, 0x09, 0x13, 0x35, 0x10, 0xcb, 0x8a, 0xcd, 0x68, 0x7b, 0x0d, 0xd3,
-	0x4f, 0x2d, 0x5a, 0x0a, 0xaa, 0x99, 0xaa, 0x9d, 0x9b, 0x29, 0x72, 0x13, 0x40, 0x27, 0xaa, 0xe3,
-	0xc7, 0xb2, 0xa1, 0x9b, 0x73, 0xae, 0x71, 0xd9, 0xe8, 0x89, 0x52, 0x48, 0x0d, 0xc5, 0x8a, 0xd9,
-	0x96, 0x6e, 0xcf, 0x09, 0x66, 0x5b, 0x86, 0xd9, 0x56, 0xc5, 0x6c, 0x5b, 0xb7, 0xe9, 0x04, 0xb3,
-	0x6d, 0xc3, 0x6c, 0x5b, 0x0d, 0xe1, 0x48, 0x0c, 0x78, 0x30, 0x76, 0xe1, 0xd4, 0x10, 0x4e, 0x05,
-	0x34, 0x53, 0xf0, 0x7e, 0xb2, 0xcc, 0x80, 0xc8, 0x6b, 0x70, 0xa9, 0x29, 0x86, 0x43, 0x2e, 0x95,
-	0x72, 0x89, 0xb1, 0x14, 0x05, 0x67, 0x89, 0xc8, 0x5d, 0x58, 0xcc, 0xa7, 0xa1, 0xbe, 0xe7, 0x39,
-	0x7b, 0xf9, 0x94, 0x51, 0xb5, 0x12, 0xf6, 0xf9, 0x98, 0xfd, 0xd5, 0xf4, 0x7c, 0x4b, 0x75, 0x3b,
-	0x45, 0x86, 0xc3, 0x48, 0xe6, 0x33, 0xc6, 0xa1, 0x06, 0xe7, 0xdf, 0xf3, 0x73, 0x07, 0x5c, 0xb3,
-	0x7f, 0xf3, 0x99, 0xd9, 0xf2, 0xa5, 0x9f, 0x35, 0xec, 0x44, 0x79, 0x35, 0xc6, 0xe9, 0xf3, 0x63,
-	0xfc, 0xce, 0x8c, 0x71, 0x5b, 0x2d, 0xbb, 0x2e, 0x06, 0x31, 0xca, 0x7c, 0xd9, 0xa5, 0xd4, 0x7f,
-	0x57, 0x83, 0x1d, 0x98, 0xef, 0x68, 0x1c, 0x7d, 0x12, 0xfb, 0x51, 0x84, 0xb1, 0x81, 0x3c, 0xeb,
-	0x3c, 0xe4, 0x7d, 0x6d, 0xe7, 0xba, 0x6a, 0x39, 0xe0, 0x13, 0x7f, 0x18, 0x0d, 0x30, 0x75, 0x9b,
-	0xe6, 0x24, 0xb9, 0x0e, 0xce, 0x63, 0x7f, 0x30, 0x40, 0x49, 0xf1, 0x30, 0x9d, 0x23, 0xb4, 0x64,
-	0xa8, 0x7c, 0x84, 0x82, 0x61, 0x9b, 0x65, 0x7b, 0x39, 0xa3, 0xd4, 0xf0, 0x0a, 0xd4, 0xa0, 0xd2,
-	0x93, 0x8f, 0xea, 0x33, 0x79, 0x0b, 0xe6, 0x93, 0xbe, 0x1f, 0xf3, 0xb0, 0x77, 0x37, 0x16, 0xa3,
-	0x28, 0x71, 0x6b, 0x7a, 0x9f, 0x5d, 0x35, 0x1c, 0x34, 0xe5, 0xb4, 0xaa, 0x4d, 0x5e, 0x81, 0xc5,
-	0xc8, 0x8f, 0x25, 0x57, 0x33, 0x2a, 0x94, 0x4d, 0x31, 0x0a, 0xa5, 0xee, 0x7e, 0x9b, 0x9e, 0xe2,
-	0x2b, 0xa7, 0x65, 0x3f, 0xc6, 0xa4, 0x2f, 0x06, 0x4c, 0xf7, 0xba, 0x4d, 0x4b, 0x86, 0x0a, 0x36,
-	0xd1, 0x1f, 0x55, 0x89, 0xeb, 0xac, 0xd8, 0x6b, 0x36, 0xcd, 0x49, 0x35, 0xff, 0x23, 0xdd, 0x57,
-	0xb7, 0x19, 0x8b, 0x31, 0x49, 0x74, 0xf7, 0x3a, 0xb4, 0xca, 0x54, 0x9e, 0x1c, 0x94, 0xf8, 0x62,
-	0x22, 0xe0, 0xcc, 0x9d, 0xd3, 0x8a, 0xa7, 0xf8, 0xea, 0x5b, 0x87, 0xe5, 0xdf, 0x3a, 0xf5, 0x49,
-	0xdf, 0x3a, 0xb9, 0x86, 0xf7, 0x8b, 0x05, 0x75, 0x33, 0x6a, 0xe5, 0x6a, 0x4f, 0x1d, 0x38, 0xd3,
-	0xe5, 0xb4, 0x69, 0x4e, 0x92, 0x6b, 0x30, 0xab, 0x8f, 0x31, 0x1e, 0x66, 0x25, 0x2b, 0x68, 0xf2,
-	0x22, 0xd8, 0x9c, 0x25, 0xae, 0xad, 0xf3, 0x7b, 0xc9, 0xc8, 0x2f, 0x67, 0x6a, 0x5b, 0xca, 0x31,
-	0x55, 0xf2, 0x6a, 0x96, 0xa6, 0x4f, 0x66, 0xe9, 0x3a, 0x38, 0x49, 0xf1, 0x39, 0x9b, 0xee, 0xe8,
-	0x92, 0xa1, 0x6d, 0xf9, 0x10, 0xbb, 0xe5, 0xd4, 0xa6, 0x25, 0x43, 0xc1, 0x22, 0x91, 0xbe, 0x1c,
-	0x25, 0xba, 0x42, 0x0e, 0xcd, 0x28, 0xef, 0x5b, 0x0b, 0x66, 0x73, 0x1f, 0xd4, 0xf6, 0xcf, 0xc2,
-	0x72, 0xe8, 0x14, 0x67, 0x64, 0x09, 0x66, 0x38, 0xa3, 0x45, 0x38, 0x29, 0xa1, 0xae, 0xe2, 0x4c,
-	0x2f, 0xc2, 0x14, 0x7c, 0x19, 0xa5, 0xb4, 0x55, 0xa6, 0x30, 0xdb, 0xbe, 0x29, 0x61, 0x3c, 0x3c,
-	0x63, 0x3e, 0xfc, 0x6c, 0x77, 0xbd, 0x1b, 0x70, 0xb1, 0x33, 0xf0, 0x79, 0xb8, 0x87, 0x89, 0xcc,
-	0x3e, 0xa9, 0x6f, 0x28, 0x93, 0x0f, 0xfd, 0x21, 0x4a, 0x4c, 0xe4, 0x8d, 0xcc, 0xcb, 0x92, 0xe1,
-	0x6d, 0xc1, 0xa5, 0x6c, 0xb0, 0x4c, 0x32, 0x6a, 0x9c, 0x34, 0x6a, 0x78, 0x6b, 0x50, 0xef, 0x72,
-	0xd5, 0x55, 0x5d, 0xa9, 0x4a, 0xac, 0xaa, 0xdb, 0x14, 0xa1, 0xc4, 0x30, 0x1f, 0x27, 0x39, 0x79,
-	0x50, 0xd3, 0xff, 0x32, 0xb6, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x63, 0xbb, 0xd8, 0x02, 0xe5,
-	0x0c, 0x00, 0x00,
+	// 1352 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcf, 0x6f, 0x1b, 0xc5,
+	0x17, 0x97, 0xb3, 0xb6, 0xe3, 0x7d, 0xb1, 0xf3, 0x75, 0xa7, 0x69, 0xbb, 0xca, 0xb7, 0xfa, 0x26,
+	0xb2, 0xf2, 0x45, 0xe1, 0x47, 0x1c, 0xea, 0xa4, 0x55, 0x89, 0x40, 0xa8, 0xb1, 0x43, 0xb1, 0x80,
+	0x62, 0xc6, 0x21, 0x45, 0xaa, 0x5a, 0x69, 0xb3, 0xfb, 0x62, 0x8f, 0x6a, 0xef, 0xac, 0x76, 0xc7,
+	0x6d, 0x2d, 0xe0, 0xcc, 0x81, 0x23, 0x67, 0x2e, 0x48, 0xbd, 0x22, 0x4e, 0xf0, 0x0f, 0xf0, 0x57,
+	0x70, 0x89, 0xc8, 0x01, 0xc4, 0x5f, 0x00, 0x9c, 0x40, 0x33, 0xb3, 0x6b, 0xcf, 0xa6, 0x09, 0xae,
+	0x10, 0x12, 0x7b, 0xda, 0xf7, 0x6b, 0xe6, 0xfd, 0xf8, 0xbc, 0xf7, 0x06, 0xc0, 0xe7, 0x5e, 0x5c,
+	0x0f, 0x23, 0x2e, 0x38, 0xb1, 0x7d, 0xee, 0x8d, 0x86, 0x18, 0x88, 0x78, 0xf9, 0x46, 0x8f, 0x89,
+	0xfe, 0xe8, 0xb0, 0xee, 0xf1, 0xe1, 0xe6, 0xf0, 0x31, 0x13, 0x0f, 0xf9, 0xe3, 0xcd, 0x1e, 0xdf,
+	0x50, 0x7a, 0x1b, 0x8f, 0xdc, 0x01, 0xf3, 0x5d, 0xc1, 0xa3, 0x78, 0x73, 0xf2, 0xab, 0x8f, 0x58,
+	0xde, 0x30, 0xec, 0x7a, 0xbc, 0xc7, 0x37, 0x15, 0xfb, 0x70, 0x74, 0xa4, 0x28, 0x45, 0xa8, 0xbf,
+	0x44, 0x7d, 0xa5, 0xc7, 0x79, 0x6f, 0x80, 0x53, 0x2d, 0xc1, 0x86, 0x18, 0x0b, 0x77, 0x18, 0x6a,
+	0x85, 0xda, 0xe7, 0x39, 0x58, 0xec, 0xb2, 0x5e, 0x80, 0xfe, 0x5e, 0xf0, 0x08, 0x07, 0x3c, 0x44,
+	0xb2, 0x06, 0xb6, 0xe4, 0xb8, 0x62, 0x14, 0xa1, 0x93, 0x5b, 0xcd, 0xad, 0x97, 0x77, 0x8b, 0x27,
+	0xc7, 0x2b, 0x73, 0xe1, 0x12, 0x9d, 0x0a, 0xc8, 0x6b, 0x5a, 0x0b, 0xa3, 0x66, 0xbb, 0xe5, 0xcc,
+	0xad, 0xe6, 0xd6, 0xed, 0xdd, 0xff, 0x9e, 0x1c, 0xaf, 0x5c, 0x81, 0x4b, 0x0f, 0x3e, 0xb8, 0x77,
+	0x6f, 0xc7, 0x1d, 0x04, 0xa3, 0xe1, 0xce, 0xfd, 0xfb, 0x1f, 0x6f, 0x5f, 0xff, 0x74, 0xed, 0x93,
+	0x07, 0x6b, 0x74, 0xaa, 0x4d, 0x1c, 0x98, 0x7f, 0x0f, 0xe3, 0xd8, 0xed, 0xa1, 0x63, 0xc9, 0xe3,
+	0x69, 0x4a, 0xd6, 0x38, 0x94, 0x26, 0x6e, 0xbc, 0x08, 0xc5, 0xb7, 0xd1, 0xf5, 0x31, 0x52, 0x3e,
+	0x2c, 0x34, 0x2e, 0xd4, 0x27, 0xd9, 0xab, 0x6b, 0x01, 0x4d, 0x14, 0x08, 0x81, 0xfc, 0x2e, 0xf7,
+	0xc7, 0xca, 0x8d, 0x32, 0x55, 0xff, 0x64, 0x0d, 0x2a, 0x7b, 0x81, 0x17, 0x8d, 0x43, 0x81, 0xbe,
+	0x12, 0xea, 0xab, 0xb2, 0xcc, 0xda, 0x57, 0x56, 0x7a, 0x0b, 0xb9, 0x0c, 0xc5, 0x76, 0xe7, 0xad,
+	0x6e, 0xbb, 0xa5, 0xee, 0xb3, 0x69, 0x42, 0x49, 0x6f, 0x0f, 0x30, 0x8a, 0x19, 0x0f, 0xd4, 0xf9,
+	0x73, 0x34, 0x25, 0xc9, 0x2b, 0x50, 0x6a, 0xb9, 0x02, 0xf7, 0xd9, 0x50, 0x07, 0x62, 0xed, 0x56,
+	0x4f, 0x8e, 0x57, 0xca, 0xd5, 0xa7, 0x9f, 0xfd, 0xf4, 0x4b, 0xc1, 0x79, 0xfa, 0xfd, 0xb7, 0x5f,
+	0x8c, 0xe9, 0x44, 0x83, 0xac, 0xc2, 0x42, 0x27, 0xc2, 0x47, 0x8c, 0x8f, 0x62, 0x99, 0xb2, 0xbc,
+	0xba, 0xc4, 0x64, 0x91, 0x1a, 0x94, 0xa5, 0x53, 0xfb, 0xe3, 0x10, 0x9b, 0xdc, 0x47, 0xa7, 0xa0,
+	0xae, 0xcb, 0xf0, 0xe4, 0x29, 0x92, 0x4e, 0x3d, 0x2a, 0x2a, 0x15, 0x93, 0x45, 0xb6, 0xe1, 0x52,
+	0x26, 0xc6, 0xc9, 0x71, 0xf3, 0x4a, 0xf7, 0x6c, 0x21, 0x69, 0xc0, 0x52, 0x46, 0x90, 0x5e, 0x50,
+	0x52, 0x46, 0x67, 0xca, 0xc8, 0x3a, 0xfc, 0x27, 0xc3, 0x6f, 0x1f, 0x38, 0xb6, 0x4a, 0xf2, 0x69,
+	0x36, 0x79, 0x1d, 0x80, 0xa2, 0xc7, 0x42, 0x26, 0xab, 0xe7, 0xc0, 0xaa, 0xb5, 0xbe, 0xd0, 0x58,
+	0x32, 0xea, 0x39, 0x11, 0x6a, 0xa4, 0xf5, 0x97, 0xa8, 0xa1, 0x5f, 0xfb, 0x3a, 0x07, 0xf6, 0x84,
+	0x34, 0xeb, 0x91, 0xcb, 0xd6, 0x63, 0x03, 0xac, 0xe7, 0x04, 0xa3, 0xd4, 0x4b, 0xdc, 0x77, 0xc3,
+	0x78, 0x34, 0x70, 0x05, 0xfa, 0xef, 0x60, 0x8a, 0x91, 0xd3, 0x6c, 0xf2, 0x3f, 0x80, 0x26, 0x0b,
+	0xfb, 0x18, 0xed, 0xe3, 0x13, 0xa1, 0x2a, 0x57, 0xa6, 0x06, 0x87, 0x2c, 0xc2, 0x5c, 0xfb, 0x40,
+	0x95, 0xab, 0x4c, 0xe7, 0xda, 0x07, 0xb5, 0xdf, 0x72, 0x00, 0xed, 0x56, 0x2b, 0x09, 0x8f, 0xdc,
+	0x84, 0x2b, 0xb7, 0x46, 0xa2, 0x8f, 0x81, 0x60, 0x9e, 0x2b, 0x18, 0x0f, 0x28, 0x1e, 0x61, 0x84,
+	0x81, 0x87, 0x09, 0xd4, 0xce, 0x13, 0x93, 0x1b, 0x70, 0x79, 0x17, 0x03, 0x3c, 0x62, 0x1e, 0x73,
+	0xa3, 0xf1, 0x5e, 0xb3, 0x33, 0x3a, 0x1c, 0x30, 0x4f, 0x7a, 0xaa, 0xa1, 0x7e, 0x8e, 0x54, 0x82,
+	0xbf, 0xcb, 0x1e, 0xe2, 0x54, 0x3d, 0x01, 0x7f, 0x86, 0xa9, 0xf0, 0xf6, 0x6e, 0x77, 0xaa, 0xa4,
+	0x03, 0xcb, 0xf0, 0x48, 0x1d, 0xec, 0xfd, 0x74, 0x64, 0xa8, 0x08, 0xcf, 0x02, 0xf9, 0x54, 0xa5,
+	0xf6, 0xab, 0x05, 0x95, 0xf7, 0x23, 0x1f, 0xa3, 0x49, 0xf4, 0x04, 0xf2, 0x12, 0x65, 0x49, 0xa8,
+	0xea, 0x9f, 0xbc, 0x00, 0xf9, 0x26, 0x67, 0xba, 0xa1, 0xac, 0x5d, 0x72, 0x72, 0xbc, 0xb2, 0x58,
+	0xfd, 0x23, 0xfd, 0x72, 0xce, 0xcf, 0xf3, 0x54, 0xc9, 0xc9, 0x9b, 0x50, 0xee, 0x44, 0x2c, 0xf0,
+	0x58, 0xe8, 0x0e, 0x64, 0x69, 0xad, 0xd9, 0xa5, 0xcd, 0x18, 0x90, 0x26, 0x2c, 0x1a, 0x29, 0x9a,
+	0xf4, 0xdd, 0x5f, 0x1f, 0x71, 0xca, 0x44, 0x0e, 0xc4, 0x69, 0xc5, 0x0a, 0xca, 0x5e, 0xc1, 0xf4,
+	0xa3, 0x1c, 0x9d, 0x0a, 0xb2, 0x99, 0x2a, 0xce, 0xcc, 0x14, 0xb9, 0x0e, 0xa0, 0x12, 0xd5, 0x71,
+	0x23, 0xd1, 0x50, 0xcd, 0xb9, 0xd0, 0xb8, 0x64, 0xf4, 0xc4, 0x54, 0x48, 0x0d, 0xc5, 0x8c, 0xd9,
+	0x96, 0x6a, 0xcf, 0x73, 0xcc, 0xb6, 0x0c, 0xb3, 0xad, 0x8c, 0xd9, 0xb6, 0x6a, 0xd3, 0x73, 0xcc,
+	0xb6, 0x0d, 0xb3, 0x6d, 0x39, 0x84, 0x43, 0x3e, 0x60, 0xde, 0xd8, 0x81, 0x67, 0x86, 0x70, 0x47,
+	0x09, 0x68, 0xa2, 0x50, 0xfb, 0x2e, 0x67, 0x06, 0x44, 0x5e, 0x85, 0x8b, 0x4d, 0x3e, 0x1c, 0x32,
+	0x21, 0x95, 0xa7, 0x18, 0xd3, 0x28, 0x38, 0x4b, 0x44, 0x6e, 0x43, 0x35, 0x9d, 0x86, 0xea, 0x9c,
+	0xe7, 0xec, 0xe5, 0x67, 0x8c, 0xb2, 0x95, 0xb0, 0x66, 0x63, 0xf6, 0x47, 0xd3, 0xf3, 0x2d, 0xd9,
+	0xed, 0x14, 0x7d, 0x1c, 0x86, 0x22, 0x9d, 0x31, 0x36, 0x35, 0x38, 0xff, 0x9c, 0x9f, 0x3b, 0xe0,
+	0x98, 0xfd, 0x9b, 0xce, 0xcc, 0x96, 0x2b, 0xdc, 0xa4, 0x61, 0xcf, 0x95, 0x67, 0x63, 0xcc, 0xcf,
+	0x8e, 0xf1, 0x4b, 0x33, 0xc6, 0x6d, 0xb9, 0xec, 0xba, 0xe8, 0x45, 0x28, 0xd2, 0x65, 0xa7, 0xa9,
+	0x7f, 0xaf, 0x06, 0x3b, 0x50, 0xd1, 0x78, 0xba, 0x1b, 0xb9, 0x61, 0x88, 0x91, 0x81, 0xbc, 0xdc,
+	0x2c, 0xe4, 0xfd, 0x60, 0x41, 0x51, 0xb3, 0xe4, 0x72, 0xd8, 0x7b, 0xe2, 0x0e, 0xc3, 0x01, 0x6a,
+	0xb7, 0xe9, 0x3c, 0x6a, 0x92, 0x5c, 0x05, 0xfb, 0xae, 0x3b, 0x18, 0xa0, 0xa0, 0x78, 0xa4, 0xe7,
+	0x08, 0xb5, 0x1f, 0xa7, 0x0c, 0x99, 0x8f, 0x3b, 0xdc, 0xc7, 0xb6, 0x9f, 0xec, 0xe5, 0x62, 0xa0,
+	0x28, 0x72, 0x19, 0x4a, 0x72, 0x10, 0xa9, 0x01, 0xa6, 0xa6, 0x1f, 0xcd, 0x7b, 0x72, 0x30, 0xbd,
+	0x01, 0x95, 0x6e, 0xdf, 0x8d, 0x58, 0xd0, 0xbb, 0x1d, 0xf1, 0x51, 0x18, 0x3b, 0x45, 0xb5, 0xd3,
+	0xae, 0x18, 0x4e, 0x9a, 0x72, 0x5a, 0x89, 0x4d, 0x6d, 0xf2, 0x12, 0x54, 0x65, 0x1d, 0x98, 0x9c,
+	0x53, 0x81, 0x68, 0xf2, 0x51, 0x20, 0xd4, 0x04, 0xb0, 0x68, 0x35, 0x3c, 0xc5, 0x97, 0x8e, 0xef,
+	0xf7, 0x23, 0x8c, 0xfb, 0x7c, 0xe0, 0xab, 0x7e, 0xb7, 0xa8, 0x2d, 0x52, 0x86, 0x0c, 0x58, 0x3f,
+	0xac, 0x62, 0xc7, 0x5e, 0xb5, 0xd6, 0x2d, 0x3a, 0x1f, 0x6b, 0x52, 0xee, 0x00, 0xdd, 0x5b, 0xb7,
+	0x7c, 0x3f, 0xc2, 0x38, 0x56, 0x1d, 0x6c, 0xd3, 0x4a, 0xa8, 0x98, 0xae, 0x66, 0x92, 0x97, 0xe1,
+	0x82, 0x81, 0xb1, 0x16, 0xf7, 0x64, 0xc5, 0x17, 0x94, 0x66, 0xf5, 0x70, 0x2a, 0xf0, 0xb9, 0xc7,
+	0x7c, 0x72, 0x13, 0xec, 0x0f, 0x43, 0x5f, 0x6e, 0xc5, 0x5b, 0xc2, 0x29, 0xab, 0xb2, 0x2c, 0xd7,
+	0xf5, 0x0b, 0xb3, 0x9e, 0xbe, 0x30, 0xeb, 0x93, 0x9a, 0x52, 0x7b, 0x94, 0x2a, 0x4b, 0xcb, 0x66,
+	0x84, 0x89, 0x65, 0x65, 0xb6, 0xa5, 0x97, 0x2a, 0xd7, 0x7e, 0xcf, 0x41, 0xd9, 0x4c, 0xa5, 0x8c,
+	0x58, 0xfd, 0x24, 0x0f, 0x35, 0x8b, 0xce, 0xf7, 0x14, 0xe9, 0x93, 0x65, 0x28, 0xe9, 0x6c, 0xe3,
+	0x51, 0x52, 0xfd, 0x92, 0x12, 0x45, 0x78, 0x44, 0xfe, 0x0f, 0x56, 0xbb, 0x15, 0x3b, 0x96, 0x2a,
+	0xd3, 0x45, 0xa3, 0x4c, 0x6d, 0x5f, 0x2e, 0x5e, 0x31, 0xa6, 0x16, 0xf3, 0xe3, 0x6c, 0xb2, 0xf3,
+	0xa7, 0x93, 0x7d, 0xd5, 0x7c, 0x19, 0xeb, 0x75, 0x6f, 0xc7, 0x93, 0x17, 0xf1, 0x4d, 0x0d, 0xf9,
+	0xee, 0x64, 0x01, 0xcc, 0x88, 0x51, 0xa4, 0xca, 0xaa, 0x1b, 0x85, 0x2b, 0x46, 0xb1, 0x02, 0x81,
+	0x4d, 0x8b, 0xb1, 0xa2, 0x6a, 0xdf, 0xe4, 0xa0, 0x94, 0xfa, 0xa7, 0x1e, 0x19, 0xe9, 0xdb, 0x74,
+	0x8e, 0xf9, 0x64, 0x09, 0x0a, 0xed, 0xd6, 0x34, 0xd4, 0x02, 0xf3, 0x13, 0x20, 0xb7, 0x5b, 0x0a,
+	0xae, 0x1a, 0xe3, 0x45, 0xe6, 0xab, 0x8d, 0xbb, 0x04, 0x05, 0x99, 0x45, 0x4c, 0x96, 0x7c, 0x41,
+	0xe2, 0x11, 0x8d, 0x8b, 0x0b, 0xe6, 0xc5, 0x7f, 0x3f, 0x94, 0xda, 0x35, 0xb8, 0xd0, 0x19, 0xb8,
+	0x2c, 0xd8, 0xc7, 0x58, 0x24, 0xaf, 0xfa, 0x6b, 0x32, 0x6f, 0x77, 0xdc, 0x21, 0x0a, 0x8c, 0xc5,
+	0xb5, 0x24, 0x82, 0x29, 0xa3, 0xb6, 0x05, 0x17, 0x93, 0xd9, 0x76, 0x9e, 0x51, 0xe3, 0xb4, 0x51,
+	0xa3, 0xb6, 0x0e, 0xe5, 0x2e, 0x93, 0x8d, 0xdd, 0x15, 0x12, 0x1a, 0x12, 0x15, 0x4d, 0x1e, 0x08,
+	0x0c, 0xd2, 0x89, 0x96, 0x92, 0x87, 0x45, 0xe5, 0xf0, 0xd6, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0xea, 0x0c, 0x11, 0xd2, 0x89, 0x0d, 0x00, 0x00,
 }
diff --git a/libs/documents/docs.proto b/libs/documents/docs.proto
index 06ae5be..41673e3 100644
--- a/libs/documents/docs.proto
+++ b/libs/documents/docs.proto
@@ -30,6 +30,8 @@ syntax="proto3";
 package documents;
 import "github.com/mwitkow/go-proto-validators/validator.proto";
 import "github.com/gogo/protobuf/gogoproto/gogo.proto";
+import "google/protobuf/timestamp.proto";
+
 //The Encrypted Envelope
 
 message SignedEnvelope {
@@ -85,7 +87,7 @@ message OrderDocument {
     OrderPart2 OrderPart2    = 7;
     OrderPart3 OrderPart3    = 8;
     OrderPart4 OrderPart4    = 9;
-    policy policy            = 10;
+    Policy policy            = 10;
 }
 
 message OrderPart2 {
@@ -108,41 +110,42 @@ message OrderPart4 {
 }
 
 message PolicyWrapper{
-    policy policy = 1;
+    Policy policy = 1;
 }
 
-message policy{
-    string example                      = 2;
-    string walletRef                    = 3;
-    string nodeId                       = 4;
-    int64 coin                          = 5;
-    repeated sharingGroup sharingGroups = 6;
-    int64 participantCount              = 7;
-	int64 threshold                     = 8;
-	repeated int64 signers              = 9;
-	string publicAddress                = 10;
-	string beneficiarydocid             = 11;
-    int64 dateTime                      = 12 [(validator.field) = {int_gt:1564050341,int_lt:32521429541}];
+message Policy{
+    string Example                      = 2 [json_name="example"];;
+    string WalletRef                    = 3 [json_name="walletRef"];;
+    string NodeId                       = 4 [json_name="nodeId"];;
+    int64 CoinType                      = 5 [json_name="coin"];;
+    repeated SharingGroup SharingGroups = 6 [json_name="sharingGroups"];;
+    int64 ParticipantCount              = 7 [json_name="participantCount"];;
+	int64 Threshold                     = 8 [json_name="threshold"];
+	repeated int64 Signers              = 9 [json_name="signers"];;
+	string PublicAddress                = 10 [json_name="publicaddress"];;
+	string BeneficiaryDocCID            = 11 [json_name="beneficiarydocid"];
+    google.protobuf.Timestamp UpdatedAt                     = 12 [json_name="updatedAt"];
+    google.protobuf.Timestamp  CreatedAt                     = 13 [json_name="createdAt"];
 }
 
-message sharingGroup {
-	int64 groupid         = 1;  
-	string groupref       = 2;
-	repeated identity ids = 3;
-	int64 threshold       = 4;
-	bytes signature       = 5;
-	int64 timeStamp       = 6;
-	string status         = 7;
+message SharingGroup {
+	int64 GroupID         = 1 [json_name="groupId"];  
+	string GroupRef       = 2 [json_name="groupref"];
+	repeated Identity IDs = 3 [json_name="ids"];
+	int64 Threshold       = 4 [json_name="threshold"];
+	bytes Signature       = 5 [json_name="signature"];
+	google.protobuf.Timestamp  TimeStamp       = 6 [json_name="timeStamp"];
+	string Status         = 7 [json_name="status"];
 }
 
 // Identity of a sharing group
-message identity {
-    string id       = 1;
-	string idRef    = 2;
-	string idType   = 3;
-	bytes share     = 4;
-	string status   = 5;
-	int64 timeStamp = 6;
+message Identity {
+    string ID       = 1 [json_name="id"];
+	string IDRef    = 2 [json_name="idRef"];
+	string IDType   = 3 [json_name="idType"];
+	bytes Share     = 4 [json_name="share"];
+	string Status   = 5 [json_name="status"];
+	google.protobuf.Timestamp  TimeStamp = 6 [json_name="timeStamp"];
 }
 
 message PlainTestMessage1 {
diff --git a/libs/documents/docs.validator.pb.go b/libs/documents/docs.validator.pb.go
index ea66ec7..63dc63a 100644
--- a/libs/documents/docs.validator.pb.go
+++ b/libs/documents/docs.validator.pb.go
@@ -9,6 +9,7 @@ import (
 	proto "github.com/golang/protobuf/proto"
 	_ "github.com/mwitkow/go-proto-validators"
 	_ "github.com/gogo/protobuf/gogoproto"
+	_ "github.com/golang/protobuf/ptypes/timestamp"
 	regexp "regexp"
 	github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators"
 )
@@ -183,25 +184,39 @@ func (this *Policy) Validate() error {
 			}
 		}
 	}
-	if !(this.DateTime > 1564050341) {
-		return github_com_mwitkow_go_proto_validators.FieldError("DateTime", fmt.Errorf(`value '%v' must be greater than '1564050341'`, this.DateTime))
+	if this.UpdatedAt != nil {
+		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.UpdatedAt); err != nil {
+			return github_com_mwitkow_go_proto_validators.FieldError("UpdatedAt", err)
+		}
 	}
-	if !(this.DateTime < 32521429541) {
-		return github_com_mwitkow_go_proto_validators.FieldError("DateTime", fmt.Errorf(`value '%v' must be less than '32521429541'`, this.DateTime))
+	if this.CreatedAt != nil {
+		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.CreatedAt); err != nil {
+			return github_com_mwitkow_go_proto_validators.FieldError("CreatedAt", err)
+		}
 	}
 	return nil
 }
 func (this *SharingGroup) Validate() error {
-	for _, item := range this.Ids {
+	for _, item := range this.IDs {
 		if item != nil {
 			if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
-				return github_com_mwitkow_go_proto_validators.FieldError("Ids", err)
+				return github_com_mwitkow_go_proto_validators.FieldError("IDs", err)
 			}
 		}
 	}
+	if this.TimeStamp != nil {
+		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.TimeStamp); err != nil {
+			return github_com_mwitkow_go_proto_validators.FieldError("TimeStamp", err)
+		}
+	}
 	return nil
 }
 func (this *Identity) Validate() error {
+	if this.TimeStamp != nil {
+		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.TimeStamp); err != nil {
+			return github_com_mwitkow_go_proto_validators.FieldError("TimeStamp", err)
+		}
+	}
 	return nil
 }
 func (this *PlainTestMessage1) Validate() error {
diff --git a/libs/documents/policy_test.go b/libs/documents/policy_test.go
index a0dbdff..3c5164d 100644
--- a/libs/documents/policy_test.go
+++ b/libs/documents/policy_test.go
@@ -9,9 +9,12 @@ import (
 	"github.com/stretchr/testify/assert"
 )
 
+func Test_a(t *testing.T) {
+
+}
+
 //Test_PolicyReadSamples - read in sample JSON polcies and ensure they are correctly
 //parsed into JSON and then Protobuffer formats
-
 func Test_PolicyReadSamples(t *testing.T) {
 	var policy *Policy
 	var err error
diff --git a/pkg/api/proto.go b/pkg/api/proto.go
index 52ed9bf..9c960fe 100644
--- a/pkg/api/proto.go
+++ b/pkg/api/proto.go
@@ -172,55 +172,56 @@ type StatusResponse struct {
 
 //Policy - JSON polciy definition
 type Policy struct {
+	Example string `json:"example" protobuf:"name=Example"`
 	// WalletRef is the customer ref ID for the wallet
-	WalletRef string `json:"walletRef"`
+	WalletRef string `json:"walletRef"  protobuf:"name=WalletRef"`
 	// NodeID as provided by the customer registration
-	NodeID string `json:"nodeId"`
+	NodeID string `json:"nodeId" protobuf:"name=NodeID"`
 	// coinType is the coin type
 	// 0 - Bitcoin
 	// 1 - Bitcoin test
-	CoinType int `json:"coin"`
+	CoinType int `json:"coin" protobuf:"name=CoinType"`
 	// Sharing groups. Each group defines a list of identities.
 	// The leader and the node are added automatically.
-	SharingGroups []SharingGroup `json:"sharingGroups"`
+	SharingGroups []SharingGroup `json:"sharingGroups" protobuf:"name=SharingGroups"`
 	// The number of participants
-	ParticipantCount uint `json:"participantCount"`
+	ParticipantCount uint `json:"participantCount" protobuf:"name=ParticipantCount"`
 	// The required number of signatures
-	Threshold uint `json:"threshold"`
+	Threshold uint `json:"threshold" protobuf:"name=Threshold"`
 	// Slice that points to signer's keys
-	Signers []uint `json:"signers"`
+	Signers []uint `json:"signers" protobuf:"name=Signers"`
 	//Public Address for deposit
-	PublicAddress string `json:"publicaddress"`
+	PublicAddress string `json:"publicaddress" protobuf:"name=PublicAddress"`
 	//The beneficiary who is able to spend
-	BeneficiaryDocID string `json:"beneficiarydocid"`
+	BeneficiaryDocID string `json:"beneficiarydocid" protobuf:"name=BeneficiaryDocCID"`
 	//TimeStamps
-	CreatedAt time.Time `json:"createdAt"`
-	UpdatedAt time.Time `json:"updatedAt"`
+	CreatedAt time.Time `json:"createdAt" protobuf:"name=CreatedAt"`
+	UpdatedAt time.Time `json:"updatedAt" protobuf:"name=UpdatedAt"`
 }
 
 // SharingGroup defines a list of identities that will hold
 // the secret after split
 type SharingGroup struct {
-	GroupID   int        `json:"groupId"`
-	GroupRef  string     `json:"groupref"`
-	IDs       []Identity `json:"ids"`
-	Threshold int        `json:"threshold"`
+	GroupID   int        `json:"groupId" protobuf:"name=GroupID"`
+	GroupRef  string     `json:"groupref" protobuf:"name=GroupRef"`
+	IDs       []Identity `json:"ids" protobuf:"name=IDs"`
+	Threshold int        `json:"threshold" protobuf:"name=Threshold"`
 	//Temporary store of pSig during withdrawal
-	Signature []byte    `json:"signature,omitempty"`
-	TimeStamp time.Time `json:"timeStamp"`
-	Status    string    `json:"status"`
+	Signature []byte    `json:"signature,omitempty" protobuf:"name=Signature"`
+	TimeStamp time.Time `json:"timeStamp" protobuf:"name=TimeStamp"`
+	Status    string    `json:"status" protobuf:"name=Status"`
 }
 
 // Identity of a sharing group
 type Identity struct {
 	// ID is a verifiable identity of IDType
-	ID string `json:"id"`
+	ID string `json:"id" protobuf:"name=ID"`
 	// IDRef is the identity reference
-	IDRef string `json:"idRef"`
+	IDRef string `json:"idRef" protobuf:"name=IDRef"`
 	// IDType is the identity type, e.g. "phone"
-	IDType string `json:"idType"`
+	IDType string `json:"idType" protobuf:"name=IDType"`
 	//Temporary store of vss shares during withdrawal
-	Share     []byte    `json:"share,omitempty"`
-	Status    string    `json:"status"`
-	TimeStamp time.Time `json:"timeStamp"`
+	Share     []byte    `json:"share,omitempty" protobuf:"name=Share"`
+	Status    string    `json:"status" protobuf:"name=Status"`
+	TimeStamp time.Time `json:"timeStamp" protobuf:"name=TimeStamp"`
 }
diff --git a/pkg/common/common.go b/pkg/common/common.go
index 3105cf8..cd9bb7d 100644
--- a/pkg/common/common.go
+++ b/pkg/common/common.go
@@ -22,11 +22,14 @@ package common
 
 import (
 	"encoding/hex"
+	"encoding/json"
 	"fmt"
 	"io"
 	"sync"
 	"time"
 
+	"github.com/gogo/protobuf/jsonpb"
+
 	"github.com/apache/incubator-milagro-dta/libs/cryptowallet"
 	"github.com/apache/incubator-milagro-dta/libs/datastore"
 	"github.com/apache/incubator-milagro-dta/libs/documents"
@@ -47,12 +50,21 @@ type IdentitySecrets struct {
 }
 
 // CreateNewDepositOrder - Generate an empty new Deposit Order with random reference
-func CreateNewDepositOrder(BeneficiaryIDDocumentCID string, nodeID string, policy api.Policy) (*documents.OrderDoc, error) {
+func CreateNewDepositOrder(BeneficiaryIDDocumentCID string, nodeID string, jsonPolicy api.Policy) (*documents.OrderDoc, error) {
 	//Create a reference for this order
 	reference, err := uuid.NewUUID()
 	if err != nil {
 		return nil, err
 	}
+
+	//Generate ProtoBuffer Version of the Policy from the JSON version
+	policy := &documents.Policy{}
+	policyJSONString, err := json.Marshal(jsonPolicy)
+	err = jsonpb.UnmarshalString(string(policyJSONString), policy)
+	if err != nil {
+		return nil, errors.Wrap(err, "Invalid Policy")
+	}
+
 	order := documents.NewOrderDoc()
 	//oder.Type will be used to extend the things that an order can do.
 	order.Type = "Safeguard_Secret"
@@ -60,6 +72,7 @@ func CreateNewDepositOrder(BeneficiaryIDDocumentCID string, nodeID string, polic
 	order.Reference = reference.String()
 	order.BeneficiaryCID = BeneficiaryIDDocumentCID
 	order.Timestamp = time.Now().Unix()
+	order.Policy = policy
 	return &order, nil
 }
 


[incubator-milagro-dta] 01/02: Add policy to order

Posted by cm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cmorris pushed a commit to branch policy
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git

commit 67702758a11307f9aa5d6d7f1444679f9f308143
Author: Christopher Morris <ch...@morris.net>
AuthorDate: Wed Aug 28 11:29:05 2019 +0100

    Add policy to order
---
 cmd/servicetester/e2e_test.sh |  5 ++--
 libs/documents/docs.proto     |  1 +
 pkg/api/proto.go              | 56 +++++++++++++++++++++++++++++++++++++++++++
 pkg/common/common.go          |  3 ++-
 pkg/defaultservice/order.go   |  3 ++-
 5 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/cmd/servicetester/e2e_test.sh b/cmd/servicetester/e2e_test.sh
index 1b3588c..d3dbbce 100755
--- a/cmd/servicetester/e2e_test.sh
+++ b/cmd/servicetester/e2e_test.sh
@@ -2,6 +2,7 @@
 #End to End Test of Services using curl/bash
 
 apiVersion="v1"
+simplePolicy='{"policy":{ "example":"single fiduciary","walletRef": "CD-2367-227","beneficiarydocid":"","nodeId": "123","coin": 0,"sharingGroups": [{"groupref": "Back Office Team","threshold":1,"ids": [{"id": "alice","idType": "oidc","idRef": "Alice"}]}],"participantCount": 7}}'
 
 status () {
   #Determine if an extension is running
@@ -22,7 +23,7 @@ status () {
 execute_bitcoin () {
   #Run 2 Tests against the Bitcoin Extension
   echo "Bitcoin Plugin Tests [2 Tests]"
-  output1=$(curl -s -X POST "http://localhost:5556/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}")
+  output1=$(curl -s -X POST "http://localhost:5556/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"policy\":$simplePolicy,\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}")
   echo $output1
   op1=$(echo $output1 | jq .orderReference)
   commitment1=$(echo $output1 | jq .commitment)
@@ -108,7 +109,7 @@ execute_safeguardsecret () {
 execute_milagro () {
   echo "Milagro Tests [1 Test]"
   output1=$(curl -s -X POST "http://localhost:5556/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":$identity}")
-  echo $output1  
+  echo $output1
   op1=$(echo $output1 | jq .orderReference)
 
 
diff --git a/libs/documents/docs.proto b/libs/documents/docs.proto
index f57e42d..06ae5be 100644
--- a/libs/documents/docs.proto
+++ b/libs/documents/docs.proto
@@ -167,3 +167,4 @@ message SimpleString {
 // rtn = decodeEnv(char* encapsulationVersion, char* encapsulatedKey,  char* SIKEprivKey)
 // rtn = sign( char* BLSsk, char* signature) 
 // rtn = verify(char* signature, char* message)  
+
diff --git a/pkg/api/proto.go b/pkg/api/proto.go
index 866911d..52ed9bf 100644
--- a/pkg/api/proto.go
+++ b/pkg/api/proto.go
@@ -76,6 +76,7 @@ type IdentityListResponse struct {
 type OrderRequest struct {
 	// BeneficiaryIDDocumentCID string            `json:"BeneficiaryIDDocumentCID,omitempty" validate:"omitempty,IPFS"`
 	BeneficiaryIDDocumentCID string            `json:"beneficiaryIDDocumentCID,omitempty"`
+	Policy                   Policy            `json:"Policy,omitempty"`
 	Extension                map[string]string `json:"extension,omitempty"`
 }
 
@@ -168,3 +169,58 @@ type StatusResponse struct {
 	Extension       map[string]string `json:"extension,omitempty"`
 	Plugin          string            `json:"plugin,omitempty"`
 }
+
+//Policy - JSON polciy definition
+type Policy struct {
+	// WalletRef is the customer ref ID for the wallet
+	WalletRef string `json:"walletRef"`
+	// NodeID as provided by the customer registration
+	NodeID string `json:"nodeId"`
+	// coinType is the coin type
+	// 0 - Bitcoin
+	// 1 - Bitcoin test
+	CoinType int `json:"coin"`
+	// Sharing groups. Each group defines a list of identities.
+	// The leader and the node are added automatically.
+	SharingGroups []SharingGroup `json:"sharingGroups"`
+	// The number of participants
+	ParticipantCount uint `json:"participantCount"`
+	// The required number of signatures
+	Threshold uint `json:"threshold"`
+	// Slice that points to signer's keys
+	Signers []uint `json:"signers"`
+	//Public Address for deposit
+	PublicAddress string `json:"publicaddress"`
+	//The beneficiary who is able to spend
+	BeneficiaryDocID string `json:"beneficiarydocid"`
+	//TimeStamps
+	CreatedAt time.Time `json:"createdAt"`
+	UpdatedAt time.Time `json:"updatedAt"`
+}
+
+// SharingGroup defines a list of identities that will hold
+// the secret after split
+type SharingGroup struct {
+	GroupID   int        `json:"groupId"`
+	GroupRef  string     `json:"groupref"`
+	IDs       []Identity `json:"ids"`
+	Threshold int        `json:"threshold"`
+	//Temporary store of pSig during withdrawal
+	Signature []byte    `json:"signature,omitempty"`
+	TimeStamp time.Time `json:"timeStamp"`
+	Status    string    `json:"status"`
+}
+
+// Identity of a sharing group
+type Identity struct {
+	// ID is a verifiable identity of IDType
+	ID string `json:"id"`
+	// IDRef is the identity reference
+	IDRef string `json:"idRef"`
+	// IDType is the identity type, e.g. "phone"
+	IDType string `json:"idType"`
+	//Temporary store of vss shares during withdrawal
+	Share     []byte    `json:"share,omitempty"`
+	Status    string    `json:"status"`
+	TimeStamp time.Time `json:"timeStamp"`
+}
diff --git a/pkg/common/common.go b/pkg/common/common.go
index b8b6b0c..3105cf8 100644
--- a/pkg/common/common.go
+++ b/pkg/common/common.go
@@ -31,6 +31,7 @@ import (
 	"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/pkg/api"
 	"github.com/google/uuid"
 	"github.com/pkg/errors"
 )
@@ -46,7 +47,7 @@ type IdentitySecrets struct {
 }
 
 // CreateNewDepositOrder - Generate an empty new Deposit Order with random reference
-func CreateNewDepositOrder(BeneficiaryIDDocumentCID string, nodeID string) (*documents.OrderDoc, error) {
+func CreateNewDepositOrder(BeneficiaryIDDocumentCID string, nodeID string, policy api.Policy) (*documents.OrderDoc, error) {
 	//Create a reference for this order
 	reference, err := uuid.NewUUID()
 	if err != nil {
diff --git a/pkg/defaultservice/order.go b/pkg/defaultservice/order.go
index c88e0ab..8e3fb7a 100644
--- a/pkg/defaultservice/order.go
+++ b/pkg/defaultservice/order.go
@@ -93,6 +93,7 @@ func (s *Service) Order(req *api.OrderRequest) (*api.OrderResponse, error) {
 
 	//Initialise values from Request object
 	beneficiaryIDDocumentCID := req.BeneficiaryIDDocumentCID
+	policy := req.Policy
 	iDDocID := s.NodeID()
 	recipientList, err := common.BuildRecipientList(s.Ipfs, iDDocID, s.MasterFiduciaryNodeID())
 	if err != nil {
@@ -105,7 +106,7 @@ func (s *Service) Order(req *api.OrderRequest) (*api.OrderResponse, error) {
 	}
 
 	//Create Order
-	order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, iDDocID)
+	order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, iDDocID, policy)
 	if err != nil {
 		return nil, err
 	}