From 61cf932dc83dafaa4962d0dd9aa37a89a05baf37 Mon Sep 17 00:00:00 2001 From: Firas Qutishat Date: Tue, 26 May 2020 04:01:28 -0400 Subject: [PATCH] feat: Sign config files in cli closes #148 Signed-off-by: Firas Qutishat --- .../createconfigcmd/createconfig.go | 47 ++++++++++++------- .../createconfigcmd/createconfig_test.go | 2 +- cmd/did-method-cli/go.mod | 2 + cmd/did-method-cli/go.sum | 11 +++-- go.mod | 3 +- go.sum | 4 -- pkg/vdri/trustbloc/models/consortium.go | 2 +- pkg/vdri/trustbloc/models/stakeholder.go | 2 +- test/bdd/go.sum | 8 ---- 9 files changed, 42 insertions(+), 39 deletions(-) diff --git a/cmd/did-method-cli/createconfigcmd/createconfig.go b/cmd/did-method-cli/createconfigcmd/createconfig.go index 44fb586..3c2550a 100644 --- a/cmd/did-method-cli/createconfigcmd/createconfig.go +++ b/cmd/did-method-cli/createconfigcmd/createconfig.go @@ -8,7 +8,6 @@ package createconfigcmd import ( "crypto/tls" "crypto/x509" - "encoding/base64" "encoding/json" "fmt" "io/ioutil" @@ -18,8 +17,8 @@ import ( "strings" docdid "github.com/hyperledger/aries-framework-go/pkg/doc/did" - "github.com/hyperledger/aries-framework-go/pkg/doc/jose" "github.com/spf13/cobra" + gojose "github.com/square/go-jose/v3" cmdutils "github.com/trustbloc/edge-core/pkg/utils/cmd" tlsutils "github.com/trustbloc/edge-core/pkg/utils/tls" @@ -82,7 +81,8 @@ type memberData struct { // PrivateKeyJwk is privatekey jwk PrivateKeyJwk json.RawMessage `json:"privateKeyJwk,omitempty"` - jsonWebKey jose.JWK + jsonWebKey gojose.JSONWebKey + sigKey gojose.SigningKey } type didClient interface { @@ -156,8 +156,10 @@ func createCreateConfigCmd() *cobra.Command { } func writeConfig(outputDirectory string, filesData map[string][]byte) error { - if err := os.MkdirAll(outputDirectory, 0700); err != nil { - return err + if outputDirectory != "" { + if err := os.MkdirAll(outputDirectory, 0700); err != nil { + return err + } } for k, v := range filesData { @@ -190,8 +192,10 @@ func getConfig(cmd *cobra.Command) (*config, error) { for _, member := range config.MembersData { if err := member.jsonWebKey.UnmarshalJSON(member.PrivateKeyJwk); err != nil { - return nil, err + return nil, fmt.Errorf("failed to unmarshal to jwk: %w", err) } + + member.sigKey = gojose.SigningKey{Key: member.jsonWebKey.Key, Algorithm: gojose.EdDSA} } return &config, nil @@ -233,6 +237,7 @@ func createFlags(startCmd *cobra.Command) { func createConfig(parameters *parameters) (map[string][]byte, error) { filesData := make(map[string][]byte) + sigKeys := make([]gojose.SigningKey, 0) consortium := models.Consortium{Domain: parameters.config.ConsortiumData.Domain, Policy: parameters.config.ConsortiumData.Policy} @@ -260,12 +265,14 @@ func createConfig(parameters *parameters) (map[string][]byte, error) { return nil, err } - jwsBytes, err := signConfig(stakeholderBytes) + jws, err := signConfig(stakeholderBytes, []gojose.SigningKey{member.sigKey}) if err != nil { return nil, err } - filesData[member.Domain] = jwsBytes + sigKeys = append(sigKeys, member.sigKey) + + filesData[member.Domain] = []byte(jws) } consortiumBytes, err := json.Marshal(consortium) @@ -273,27 +280,31 @@ func createConfig(parameters *parameters) (map[string][]byte, error) { return nil, err } - jwsBytes, err := signConfig(consortiumBytes) + jws, err := signConfig(consortiumBytes, sigKeys) if err != nil { return nil, err } - filesData[consortium.Domain] = jwsBytes + filesData[consortium.Domain] = []byte(jws) return filesData, nil } -func signConfig(configBytes []byte) ([]byte, error) { - // TODO add logic for jws - // for now return dummy jws - // remove this code after adding logic for jws - m := make(map[string]interface{}) - m["payload"] = base64.RawURLEncoding.EncodeToString(configBytes) +func signConfig(configBytes []byte, keys []gojose.SigningKey) (string, error) { + signer, err := gojose.NewMultiSigner(keys, nil) + if err != nil { + return "", err + } + + jws, err := signer.Sign(configBytes) + if err != nil { + return "", err + } - return json.Marshal(m) + return jws.FullSerialize(), nil } -func createDID(didClient didClient, sidetreeURL string, jwk *jose.JWK) (*docdid.Doc, error) { +func createDID(didClient didClient, sidetreeURL string, jwk *gojose.JSONWebKey) (*docdid.Doc, error) { pubKey, err := jwk.Public().MarshalJSON() if err != nil { return nil, err diff --git a/cmd/did-method-cli/createconfigcmd/createconfig_test.go b/cmd/did-method-cli/createconfigcmd/createconfig_test.go index e9b435d..82fc0c1 100644 --- a/cmd/did-method-cli/createconfigcmd/createconfig_test.go +++ b/cmd/did-method-cli/createconfigcmd/createconfig_test.go @@ -152,7 +152,7 @@ func TestCreateConfigCmd(t *testing.T) { err = cmd.Execute() require.Error(t, err) - require.Contains(t, err.Error(), "unable to read JWK") + require.Contains(t, err.Error(), "failed to unmarshal to jwk") }) t.Run("test error from create did", func(t *testing.T) { diff --git a/cmd/did-method-cli/go.mod b/cmd/did-method-cli/go.mod index 547622c..83ce9f4 100644 --- a/cmd/did-method-cli/go.mod +++ b/cmd/did-method-cli/go.mod @@ -9,6 +9,8 @@ replace github.com/trustbloc/trustbloc-did-method => ../.. require ( github.com/hyperledger/aries-framework-go v0.1.4-0.20200521101441-dcc599e23d09 github.com/spf13/cobra v1.0.0 + github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387 + github.com/stretchr/testify v1.5.1 github.com/trustbloc/edge-core v0.1.3 github.com/trustbloc/trustbloc-did-method v0.0.0-00010101000000-000000000000 ) diff --git a/cmd/did-method-cli/go.sum b/cmd/did-method-cli/go.sum index 771b8b7..78f0596 100644 --- a/cmd/did-method-cli/go.sum +++ b/cmd/did-method-cli/go.sum @@ -12,6 +12,7 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5 github.com/aws/aws-sdk-go v1.25.39/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833/go.mod h1:8c4/i2VlovMO2gBnHGQPN5EJw+H0lx1u/5p+cgsXtCk= github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= @@ -73,6 +74,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -181,8 +183,8 @@ github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb6 github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/square/go-jose v2.4.1+incompatible h1:KFYc54wTtgnd3x4B/Y7Zr1s/QaEx2BNzRsB3Hae5LHo= -github.com/square/go-jose v2.4.1+incompatible/go.mod h1:7MxpAF/1WTVUu8Am+T5kNy+t0902CaLWM4Z745MkOa8= +github.com/square/go-jose v2.5.1+incompatible h1:FC+BwI9FzJZWpKaE0yUhFNbp/CyFHndARzuGVME/LGk= +github.com/square/go-jose v2.5.1+incompatible/go.mod h1:7MxpAF/1WTVUu8Am+T5kNy+t0902CaLWM4Z745MkOa8= github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387 h1:PjfQbTWDEoNh4v+4NNirclXoCIxjjLXsqSAP1iYxuOM= github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387/go.mod h1:iYbsnddeHsxZC0AxvsQsVV1gPR8VPiSYT5FsUTeaEuY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -278,6 +280,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -297,8 +300,8 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= 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 --git a/go.mod b/go.mod index d801922..9dfe909 100644 --- a/go.mod +++ b/go.mod @@ -14,8 +14,7 @@ require ( github.com/gorilla/mux v1.7.4 github.com/hyperledger/aries-framework-go v0.1.4-0.20200521101441-dcc599e23d09 github.com/sirupsen/logrus v1.4.2 - github.com/square/go-jose v2.4.1+incompatible + github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387 github.com/stretchr/testify v1.5.1 github.com/trustbloc/sidetree-core-go v0.1.3 - gopkg.in/square/go-jose.v2 v2.4.1 // indirect ) diff --git a/go.sum b/go.sum index a0fcae3..40f87a0 100644 --- a/go.sum +++ b/go.sum @@ -114,8 +114,6 @@ github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/square/go-jose v2.4.1+incompatible h1:KFYc54wTtgnd3x4B/Y7Zr1s/QaEx2BNzRsB3Hae5LHo= -github.com/square/go-jose v2.4.1+incompatible/go.mod h1:7MxpAF/1WTVUu8Am+T5kNy+t0902CaLWM4Z745MkOa8= github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387 h1:PjfQbTWDEoNh4v+4NNirclXoCIxjjLXsqSAP1iYxuOM= github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387/go.mod h1:iYbsnddeHsxZC0AxvsQsVV1gPR8VPiSYT5FsUTeaEuY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -214,8 +212,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= diff --git a/pkg/vdri/trustbloc/models/consortium.go b/pkg/vdri/trustbloc/models/consortium.go index 4d432ca..89e7657 100644 --- a/pkg/vdri/trustbloc/models/consortium.go +++ b/pkg/vdri/trustbloc/models/consortium.go @@ -12,7 +12,7 @@ import ( "fmt" "time" - "github.com/square/go-jose" + "github.com/square/go-jose/v3" ) /* diff --git a/pkg/vdri/trustbloc/models/stakeholder.go b/pkg/vdri/trustbloc/models/stakeholder.go index 8ba10e4..ffcafc1 100644 --- a/pkg/vdri/trustbloc/models/stakeholder.go +++ b/pkg/vdri/trustbloc/models/stakeholder.go @@ -12,7 +12,7 @@ import ( "fmt" "time" - "github.com/square/go-jose" + "github.com/square/go-jose/v3" ) /* diff --git a/test/bdd/go.sum b/test/bdd/go.sum index a73d550..378af09 100644 --- a/test/bdd/go.sum +++ b/test/bdd/go.sum @@ -154,8 +154,6 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hyperledger/aries-framework-go v0.1.3 h1:uf+p4qmB5ar2H3iQy8y3sh47RC/NP9ty6y/2Onxu4Dg= -github.com/hyperledger/aries-framework-go v0.1.3/go.mod h1:rGRpDV9yPdWuJfLEBvTuJNSrUeM66q39iFqcSo4wmz0= github.com/hyperledger/aries-framework-go v0.1.4-0.20200521101441-dcc599e23d09 h1:FFtZbPVvL2m9foCQGJKsXbHfFWPejjaCWBK3o44Aa78= github.com/hyperledger/aries-framework-go v0.1.4-0.20200521101441-dcc599e23d09/go.mod h1:rGRpDV9yPdWuJfLEBvTuJNSrUeM66q39iFqcSo4wmz0= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -265,8 +263,6 @@ github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHN github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/square/go-jose v2.4.1+incompatible h1:KFYc54wTtgnd3x4B/Y7Zr1s/QaEx2BNzRsB3Hae5LHo= -github.com/square/go-jose v2.4.1+incompatible/go.mod h1:7MxpAF/1WTVUu8Am+T5kNy+t0902CaLWM4Z745MkOa8= github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387 h1:PjfQbTWDEoNh4v+4NNirclXoCIxjjLXsqSAP1iYxuOM= github.com/square/go-jose/v3 v3.0.0-20191119004800-96c717272387/go.mod h1:iYbsnddeHsxZC0AxvsQsVV1gPR8VPiSYT5FsUTeaEuY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -285,8 +281,6 @@ github.com/teserakt-io/golang-ed25519 v0.0.0-20200315192543-8255be791ce4/go.mod github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/trustbloc/edge-core v0.1.3 h1:AE9XMBIVR5p67PE7ywkY4X6ILXT0gAXeIBGfOwMCcVc= github.com/trustbloc/edge-core v0.1.3/go.mod h1:mmgEfSIoNjshnVdxEtPwh2CLs0EaBaaejgI2KNsOEOE= -github.com/trustbloc/json-gold v0.3.1-0.20200414173446-30d742ee949e h1:i+hGa8C1MKGO71j3jIV7e2aKX72/DTrzLjq9R8kc6xk= -github.com/trustbloc/json-gold v0.3.1-0.20200414173446-30d742ee949e/go.mod h1:OK1z7UgtBZk06n2cDE2OSq1kffmjFFp5/2yhLLCz9UM= github.com/trustbloc/sidetree-core-go v0.1.3 h1:p3Rgk0w8unimzc6QsISB3dwOS+4J/W8zWTM6siqMnoA= github.com/trustbloc/sidetree-core-go v0.1.3/go.mod h1:xCuMVdRtXiCghr58Dcd1RW9t0lCDXPPjkSiACzKGaZc= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -413,8 +407,6 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8X gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= 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=