diff --git a/Makefile b/Makefile index 56c26a706138bb2708cc87e086b3ef2d43084867..4b902dda84735ba7e938c4d7a258d8927df0f0c9 100644 --- a/Makefile +++ b/Makefile @@ -20,12 +20,12 @@ build: go mod tidy update_release: - GOFLAGS="" go get gitlab.com/elixxir/primitives@release - GOFLAGS="" go get gitlab.com/elixxir/crypto@release - GOFLAGS="" go get gitlab.com/xx_network/crypto@release - GOFLAGS="" go get gitlab.com/elixxir/comms@release - GOFLAGS="" go get gitlab.com/xx_network/comms@release - GOFLAGS="" go get gitlab.com/xx_network/primitives@release + GOFLAGS="" go get -u gitlab.com/elixxir/primitives@release + GOFLAGS="" go get -u gitlab.com/elixxir/crypto@release + GOFLAGS="" go get -u gitlab.com/xx_network/crypto@release + GOFLAGS="" go get -u gitlab.com/elixxir/comms@release + GOFLAGS="" go get -u gitlab.com/xx_network/comms@release + GOFLAGS="" go get -u gitlab.com/xx_network/primitives@release update_master: GOFLAGS="" go get gitlab.com/elixxir/primitives@master diff --git a/cmd/root.go b/cmd/root.go index e4385c846e5effe562287098281e995918f8cb9c..f226c6ebd639f2f45cb8b6165c008d4e2c3e270a 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -206,7 +206,7 @@ var rootCmd = &cobra.Command{ } } fmt.Printf("Received %d\n", receiveCnt) - client.StopNetworkFollower(1 * time.Second) + // client.StopNetworkFollower(1 * time.Second) /*if err!=nil{ fmt.Printf("Failed to cleanly close threads: %+v\n", err) }*/ diff --git a/globals/version_vars.go b/globals/version_vars.go index f3d7b7dbd427c2536d432c1072db1ff0229adea6..45b501e82aabf00cdcac5a59113ceb51ea4c8bd8 100644 --- a/globals/version_vars.go +++ b/globals/version_vars.go @@ -1,9 +1,9 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2020-11-20 09:50:07.543626 -0800 PST m=+0.016833164 +// 2020-12-30 13:10:27.265664 -0600 CST m=+0.032380471 package globals -const GITVERSION = `788439a Do the hashing of adding a fact properly` +const GITVERSION = `8185927 Merge branch 'XX-2971/contactCompression' into 'release'` const SEMVER = "1.4.0" const DEPENDENCIES = `module gitlab.com/elixxir/client @@ -25,14 +25,18 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.7.1 gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 - gitlab.com/elixxir/comms v0.0.4-0.20201120005227-ec9177071abb - gitlab.com/elixxir/crypto v0.0.5-0.20201118204646-9b23991834c6 - gitlab.com/elixxir/ekv v0.1.3 - gitlab.com/elixxir/primitives v0.0.3-0.20201116174806-97f190989704 - gitlab.com/xx_network/comms v0.0.4-0.20201119231004-a67d08045535 - gitlab.com/xx_network/crypto v0.0.4 - gitlab.com/xx_network/primitives v0.0.3-0.20201116234927-44e42fc91e7c - golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 + gitlab.com/elixxir/comms v0.0.4-0.20201229200853-c403d72e877c + gitlab.com/elixxir/crypto v0.0.7-0.20201222203132-9b4cc1ae3da6 + gitlab.com/elixxir/ekv v0.1.4-0.20201217220111-9c7e8be21577 + gitlab.com/elixxir/primitives v0.0.3-0.20201229212305-2ab1e938b1cb + gitlab.com/xx_network/comms v0.0.4-0.20201222193955-56206d700360 + gitlab.com/xx_network/crypto v0.0.5-0.20201215233953-36cca1af8b2f + gitlab.com/xx_network/primitives v0.0.4-0.20201229212313-fe33d9809f27 + golang.org/x/crypto v0.0.0-20201217014255-9d1352758620 + golang.org/x/net v0.0.0-20201110031124-69a78807bb2b // indirect + golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e // indirect + google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4 // indirect + google.golang.org/grpc v1.33.2 // indirect google.golang.org/protobuf v1.25.0 gopkg.in/ini.v1 v1.61.0 // indirect ) diff --git a/go.mod b/go.mod index f9369486b28cf4f37dbff4e21ada3c1018e1b0d5..be4d1816537925f030263a9bd83d0d3c1f264d1b 100644 --- a/go.mod +++ b/go.mod @@ -18,13 +18,13 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.7.1 gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 - gitlab.com/elixxir/comms v0.0.4-0.20201217200754-6259dc49e6f1 - gitlab.com/elixxir/crypto v0.0.7-0.20201217200352-0ba771a66932 - gitlab.com/elixxir/ekv v0.1.4 - gitlab.com/elixxir/primitives v0.0.3-0.20201217193438-8ebfc882f1de - gitlab.com/xx_network/comms v0.0.4-0.20201217200138-87075d5b4ffd - gitlab.com/xx_network/crypto v0.0.5-0.20201217195719-cc31e1d1eee3 - gitlab.com/xx_network/primitives v0.0.4-0.20201216174909-808eb0fc97fc + gitlab.com/elixxir/comms v0.0.4-0.20201229200853-c403d72e877c + gitlab.com/elixxir/crypto v0.0.7-0.20201222203132-9b4cc1ae3da6 + gitlab.com/elixxir/ekv v0.1.4-0.20201217220111-9c7e8be21577 + gitlab.com/elixxir/primitives v0.0.3-0.20201229212305-2ab1e938b1cb + gitlab.com/xx_network/comms v0.0.4-0.20201222193955-56206d700360 + gitlab.com/xx_network/crypto v0.0.5-0.20201215233953-36cca1af8b2f + gitlab.com/xx_network/primitives v0.0.4-0.20201229212313-fe33d9809f27 golang.org/x/crypto v0.0.0-20201217014255-9d1352758620 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b // indirect golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e // indirect diff --git a/go.sum b/go.sum index 2fb839b76efbb6e51ba0aade4c00ae960a8361ab..120dbd3722abf185d20f38d7e223e87c3b6c2e66 100644 --- a/go.sum +++ b/go.sum @@ -20,6 +20,8 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/badoux/checkmail v1.2.1 h1:TzwYx5pnsV6anJweMx2auXdekBwGr/yt1GgalIx9nBQ= +github.com/badoux/checkmail v1.2.1/go.mod h1:XroCOBU5zzZJcLvgwU15I+2xXyCdTWXyR9MGfRhBYy0= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= @@ -172,6 +174,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nyaruka/phonenumbers v1.0.60 h1:nnAcNwmZflhegiImm6MkvjlRRyoaSw1ox/jGPAewWTg= +github.com/nyaruka/phonenumbers v1.0.60/go.mod h1:sDaTZ/KPX5f8qyV9qN+hIm+4ZBARJrupC6LuhshJq1U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= @@ -254,22 +258,44 @@ github.com/zeebo/pcg v1.0.0 h1:dt+dx+HvX8g7Un32rY9XWoYnd0NmKmrIzpHF7qiTDj0= github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 h1:Gi6rj4mAlK0BJIk1HIzBVMjWNjIUfstrsXC2VqLYPcA= gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228/go.mod h1:H6jztdm0k+wEV2QGK/KYA+MY9nj9Zzatux/qIvDDv3k= -gitlab.com/elixxir/comms v0.0.4-0.20201217200754-6259dc49e6f1 h1:4iuAA/I8/aQ1Jn3gBguuR1u+LVy3YyShxpoNcqApaVg= -gitlab.com/elixxir/comms v0.0.4-0.20201217200754-6259dc49e6f1/go.mod h1:2sNUHm725vQG4pG1RtvMd7kJ5CNqFb7Rl9cenuQCa2c= -gitlab.com/elixxir/crypto v0.0.7-0.20201217200352-0ba771a66932 h1:GCvdkpwwmU1DTZtpT4P2jjYuPcDQ6pBKkzP0vo7oRM8= -gitlab.com/elixxir/crypto v0.0.7-0.20201217200352-0ba771a66932/go.mod h1:nqSNe486j6ua96nv1et6x2ESl/qXevkx7f31GowMRh4= -gitlab.com/elixxir/ekv v0.1.3 h1:OE+LBMIhjGUMwc6hHJzYvEPNJQV7t1vMnJyIgxUMUo8= -gitlab.com/elixxir/ekv v0.1.3/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= -gitlab.com/elixxir/ekv v0.1.4 h1:NLVMwsFEKArWcsDHu2DbXlm9374iSgn7oIA3rVSsvjc= -gitlab.com/elixxir/ekv v0.1.4/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= -gitlab.com/elixxir/primitives v0.0.3-0.20201217193438-8ebfc882f1de h1:DxEMJ2GC9CTe9dQlmX5Zr6qtNm7MU74MtmWSJeXxrFw= -gitlab.com/elixxir/primitives v0.0.3-0.20201217193438-8ebfc882f1de/go.mod h1:H1OZ6ZXzTB3G4nOEdJzBJ7BySRnivpJTkTphxazFCl4= -gitlab.com/xx_network/comms v0.0.4-0.20201217200138-87075d5b4ffd h1:4LjS3UuBNA/AaglIJ+k1IBoxYgCWt+FM1MPYxjAFfaQ= -gitlab.com/xx_network/comms v0.0.4-0.20201217200138-87075d5b4ffd/go.mod h1:/vIk6tSrDqk/7HZOdrbSXZT+kEL43HIoz60AoZTzTXg= -gitlab.com/xx_network/crypto v0.0.5-0.20201217195719-cc31e1d1eee3 h1:xXJAkvhHZl5CUX8/9rqe8hod5FbqZrxwMuT8cG48Mxs= -gitlab.com/xx_network/crypto v0.0.5-0.20201217195719-cc31e1d1eee3/go.mod h1:iHCS8UOFndbXivLTeIarxN8TKbi3NcanZj29KtMzs2o= -gitlab.com/xx_network/primitives v0.0.4-0.20201216174909-808eb0fc97fc h1:nZ0kNhQfkEr4TIpf1MQxOIWiSd1M1YTE2JrFA1SPSD4= -gitlab.com/xx_network/primitives v0.0.4-0.20201216174909-808eb0fc97fc/go.mod h1:cs0QlFpdMDI6lAo61lDRH2JZz+3aVkHy+QogOB6F/qc= +gitlab.com/elixxir/comms v0.0.4-0.20201229200853-c403d72e877c h1:YjTlUbZiNiJdL7Fy4TIUoWlHNK4dFOtuJ40YgsG7fac= +gitlab.com/elixxir/comms v0.0.4-0.20201229200853-c403d72e877c/go.mod h1:ezjHgNNuvDBeiFn+N2IcafKKV4ewhzzSpwSjxxaMCcA= +gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A= +gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c= +gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw= +gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= +gitlab.com/elixxir/crypto v0.0.7-0.20201222203132-9b4cc1ae3da6 h1:Vyf2wJ1/CoHLznATpI+z84OJQ+sgAbpVLT9P1CNjSVI= +gitlab.com/elixxir/crypto v0.0.7-0.20201222203132-9b4cc1ae3da6/go.mod h1:NsIzH+TN592lMcmJGVzxUE64dObXuci7jo0qajyGahI= +gitlab.com/elixxir/ekv v0.1.4-0.20201217220111-9c7e8be21577 h1:qT3ZO9GbKv7PcmakATsXsUdzn/hlm817ETOT/csDIak= +gitlab.com/elixxir/ekv v0.1.4-0.20201217220111-9c7e8be21577/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= +gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg= +gitlab.com/elixxir/primitives v0.0.0-20200804170709-a1896d262cd9/go.mod h1:p0VelQda72OzoUckr1O+vPW0AiFe0nyKQ6gYcmFSuF8= +gitlab.com/elixxir/primitives v0.0.0-20200804182913-788f47bded40/go.mod h1:tzdFFvb1ESmuTCOl1z6+yf6oAICDxH2NPUemVgoNLxc= +gitlab.com/elixxir/primitives v0.0.1 h1:q61anawANlNAExfkeQEE1NCsNih6vNV1FFLoUQX6txQ= +gitlab.com/elixxir/primitives v0.0.1/go.mod h1:kNp47yPqja2lHSiS4DddTvFpB/4D9dB2YKnw5c+LJCE= +gitlab.com/elixxir/primitives v0.0.3-0.20201222171449-bdfe30389bb5 h1:BUV1ouY+9NA5+ZF+QfTpIBL1vO5zk31I68N7DX9bKj8= +gitlab.com/elixxir/primitives v0.0.3-0.20201222171449-bdfe30389bb5/go.mod h1:5Z8fce94mks0aFhMvzftx2jJpDx4/pzDU20G2oTiU9w= +gitlab.com/elixxir/primitives v0.0.3-0.20201229212305-2ab1e938b1cb h1:7LMaemxU2c3qlsK/4m4/sXVj5OWdn+9rhXC2u6b03aQ= +gitlab.com/elixxir/primitives v0.0.3-0.20201229212305-2ab1e938b1cb/go.mod h1:5Z8fce94mks0aFhMvzftx2jJpDx4/pzDU20G2oTiU9w= +gitlab.com/xx_network/comms v0.0.0-20200805174823-841427dd5023/go.mod h1:owEcxTRl7gsoM8c3RQ5KAm5GstxrJp5tn+6JfQ4z5Hw= +gitlab.com/xx_network/comms v0.0.4-0.20201130190834-365ddae56e7b/go.mod h1:YViGbRj7FjJYoaO4NpALGEd9dK/l8uUT000FEBbUTL8= +gitlab.com/xx_network/comms v0.0.4-0.20201222193955-56206d700360 h1:IlPemXfxV/yyUl5bAV5yATQKtmrsL7SMzho5FqAUv0s= +gitlab.com/xx_network/comms v0.0.4-0.20201222193955-56206d700360/go.mod h1:YViGbRj7FjJYoaO4NpALGEd9dK/l8uUT000FEBbUTL8= +gitlab.com/xx_network/crypto v0.0.3/go.mod h1:DF2HYvvCw9wkBybXcXAgQMzX+MiGbFPjwt3t17VRqRE= +gitlab.com/xx_network/crypto v0.0.4 h1:lpKOL5mTJ2awWMfgBy30oD/UvJVrWZzUimSHlOdZZxo= +gitlab.com/xx_network/crypto v0.0.4/go.mod h1:+lcQEy+Th4eswFgQDwT0EXKp4AXrlubxalwQFH5O0Mk= +gitlab.com/xx_network/crypto v0.0.5-0.20201125005132-fd9d3cd31e0b/go.mod h1:+lcQEy+Th4eswFgQDwT0EXKp4AXrlubxalwQFH5O0Mk= +gitlab.com/xx_network/crypto v0.0.5-0.20201215233953-36cca1af8b2f h1:Qdd2h1FsX8KLdcAHn6TcT93ex23p3qcuwkg7XjAAx/g= +gitlab.com/xx_network/crypto v0.0.5-0.20201215233953-36cca1af8b2f/go.mod h1:NM4Lk3//mOSlWwySpaH8FMmYZNm8qtjr6EawfaAHzH4= +gitlab.com/xx_network/primitives v0.0.0-20200803231956-9b192c57ea7c/go.mod h1:wtdCMr7DPePz9qwctNoAUzZtbOSHSedcK++3Df3psjA= +gitlab.com/xx_network/primitives v0.0.0-20200804183002-f99f7a7284da h1:CCVslUwNC7Ul7NG5nu3ThGTSVUt1TxNRX+47f5TUwnk= +gitlab.com/xx_network/primitives v0.0.0-20200804183002-f99f7a7284da/go.mod h1:OK9xevzWCaPO7b1wiluVJGk7R5ZsuC7pHY5hteZFQug= +gitlab.com/xx_network/primitives v0.0.2 h1:r45yKenJ9e7PylI1ZXJ1Es09oYNaYXjxVy9+uYlwo7Y= +gitlab.com/xx_network/primitives v0.0.2/go.mod h1:cs0QlFpdMDI6lAo61lDRH2JZz+3aVkHy+QogOB6F/qc= +gitlab.com/xx_network/primitives v0.0.3 h1:RBJGPtphUyDvN8iG8+VTF8tr5iT9f5WHo0NCbenspYE= +gitlab.com/xx_network/primitives v0.0.3/go.mod h1:cs0QlFpdMDI6lAo61lDRH2JZz+3aVkHy+QogOB6F/qc= +gitlab.com/xx_network/primitives v0.0.4-0.20201229212313-fe33d9809f27 h1:JGpYRKkhPw58dlhii/wH8N9uWZ1AOTyVw3b6ZYdndA8= +gitlab.com/xx_network/primitives v0.0.4-0.20201229212313-fe33d9809f27/go.mod h1:cs0QlFpdMDI6lAo61lDRH2JZz+3aVkHy+QogOB6F/qc= gitlab.com/xx_network/ring v0.0.2 h1:TlPjlbFdhtJrwvRgIg4ScdngMTaynx/ByHBRZiXCoL0= gitlab.com/xx_network/ring v0.0.2/go.mod h1:aLzpP2TiZTQut/PVHR40EJAomzugDdHXetbieRClXIM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -284,7 +310,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200707235045-ab33eee955e0 h1:eIYIE7EC5/Wv5Kbz8bJPaq+TN3kq3W8S+LSm62vM0DY= +golang.org/x/crypto v0.0.0-20200707235045-ab33eee955e0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= @@ -357,8 +387,6 @@ golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201029080932-201ba4db2418/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e h1:AyodaIpKjppX+cBfTASF2E1US3H2JFBj920Ot3rtDjs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/interfaces/contact/contact.go b/interfaces/contact/contact.go index c060a74a167e5d6377077ee38ccc5b49284c40c1..7dd6322c39971968d9731374e96792b36dd40677 100644 --- a/interfaces/contact/contact.go +++ b/interfaces/contact/contact.go @@ -8,15 +8,15 @@ package contact import ( - "encoding/json" + "bytes" + "encoding/binary" "github.com/pkg/errors" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/primitives/fact" "gitlab.com/xx_network/primitives/id" ) -const factDelimiter = "," -const factBreak = ";" +const sizeByteLength = 2 // Contact implements the Contact interface defined in interface/contact.go, // in go, the structure is meant to be edited directly, the functions are for @@ -28,21 +28,103 @@ type Contact struct { Facts fact.FactList } +// Marshal saves the Contact in a compact byte slice. The byte slice has +// the following structure (not to scale). +// +// +----------+----------------+---------+----------+----------+----------------+----------+ +// | DhPubKey | OwnershipProof | Facts | ID | | | | +// | size | size | size | | DhPubKey | OwnershipProof | FactList | +// | 2 bytes | 2 bytes | 2 bytes | 33 bytes | | | | +// +----------+----------------+---------+----------+----------+----------------+----------+ func (c Contact) Marshal() ([]byte, error) { - return json.Marshal(&c) + var buff bytes.Buffer + b := make([]byte, sizeByteLength) + + // Write size of DhPubKey + var dhPubKey []byte + var err error + if c.DhPubKey != nil { + dhPubKey, err = c.DhPubKey.GobEncode() + if err != nil { + return nil, errors.Errorf("Failed to gob encode DhPubKey: %+v", err) + } + } + binary.PutVarint(b, int64(len(dhPubKey))) + buff.Write(b) + + // Write size of OwnershipProof + binary.PutVarint(b, int64(len(c.OwnershipProof))) + buff.Write(b) + + // Write length of Facts + factList := c.Facts.Stringify() + binary.PutVarint(b, int64(len(factList))) + buff.Write(b) + + // Write ID + if c.ID != nil { + buff.Write(c.ID.Marshal()) + } else { + emptyID := make([]byte, id.ArrIDLen) + buff.Write(emptyID) + } + + // Write DhPubKey + buff.Write(dhPubKey) + + // Write OwnershipProof + buff.Write(c.OwnershipProof) + + // Write fact list + buff.Write([]byte(factList)) + + return buff.Bytes(), nil } +// Unmarshal decodes the byte slice produced by Contact.Marshal into a Contact. func Unmarshal(b []byte) (Contact, error) { - c := Contact{} - err := json.Unmarshal(b, &c) + c := Contact{DhPubKey: &cyclic.Int{}} + var err error + buf := bytes.NewBuffer(b) + + // Get size (in bytes) of each field + dhPubKeySize, _ := binary.Varint(buf.Next(sizeByteLength)) + ownershipProofSize, _ := binary.Varint(buf.Next(sizeByteLength)) + factsSize, _ := binary.Varint(buf.Next(sizeByteLength)) + + // Get and unmarshal ID + c.ID, err = id.Unmarshal(buf.Next(id.ArrIDLen)) if err != nil { - return c, err + return c, errors.Errorf("Failed to unmarshal Contact ID: %+v", err) + } + + // Handle nil ID + if bytes.Equal(c.ID.Marshal(), make([]byte, id.ArrIDLen)) { + c.ID = nil } - for i, fact := range c.Facts { - if !fact.T.IsValid() { - return Contact{}, errors.Errorf("Fact %v/%v has invalid "+ - "type: %s", i, len(c.Facts), fact.T) + + // Get and decode DhPubKey + if dhPubKeySize == 0 { + // Handle nil key + c.DhPubKey = nil + } else { + err = c.DhPubKey.GobDecode(buf.Next(int(dhPubKeySize))) + if err != nil { + return c, errors.Errorf("Failed to gob decode Contact DhPubKey: %+v", err) } } + + // Get OwnershipProof + c.OwnershipProof = buf.Next(int(ownershipProofSize)) + if len(c.OwnershipProof) == 0 { + c.OwnershipProof = nil + } + + // Get and unstringify fact list + c.Facts, _, err = fact.UnstringifyFactList(string(buf.Next(int(factsSize)))) + if err != nil { + return c, errors.Errorf("Failed to unstringify Fact List: %+v", err) + } + return c, nil } diff --git a/interfaces/contact/contact_test.go b/interfaces/contact/contact_test.go new file mode 100644 index 0000000000000000000000000000000000000000..eb365acf79b9251419fd4fe8a042c31843234620 --- /dev/null +++ b/interfaces/contact/contact_test.go @@ -0,0 +1,113 @@ +package contact + +import ( + "encoding/json" + "gitlab.com/elixxir/crypto/cyclic" + "gitlab.com/elixxir/primitives/fact" + "gitlab.com/xx_network/crypto/csprng" + "gitlab.com/xx_network/crypto/large" + "gitlab.com/xx_network/primitives/id" + "math" + "math/rand" + "reflect" + "testing" +) + +// Tests marshaling and unmarshalling of a common contact. +func TestContact_Marshal_Unmarshal(t *testing.T) { + expectedContact := Contact{ + ID: id.NewIdFromUInt(rand.Uint64(), id.User, t), + DhPubKey: getCycInt(256), + Facts: fact.FactList{ + {Fact: "myUsername", T: fact.Username}, + {Fact: "devinputvalidation@elixxir.io", T: fact.Email}, + {Fact: "6502530000US", T: fact.Phone}, + {Fact: "6502530001US", T: fact.Phone}, + }, + } + + buff, err := expectedContact.Marshal() + if err != nil { + t.Errorf("Marshal() produced an error: %+v", err) + } + + testContact, err := Unmarshal(buff) + if err != nil { + t.Errorf("Unmarshal() produced an error: %+v", err) + } + + if !reflect.DeepEqual(expectedContact, testContact) { + t.Errorf("Unmarshaled Contact does not match expected."+ + "\nexpected: %#v\nreceived: %#v", expectedContact, testContact) + t.Errorf("DhPubKey."+ + "\nexpected: %+v\nreceived: %+v", expectedContact.DhPubKey.TextVerbose(10, math.MaxInt64), testContact.DhPubKey.TextVerbose(10, math.MaxInt64)) + } +} + +// Tests the size of marshaling and JSON marshaling of a Contact with a large +// amount of data. +func TestContact_Marshal_Size(t *testing.T) { + expectedContact := Contact{ + ID: id.NewIdFromUInt(rand.Uint64(), id.User, t), + DhPubKey: getCycInt(512), + OwnershipProof: make([]byte, 1024), + Facts: fact.FactList{ + {Fact: "myVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongUsername", T: fact.Username}, + {Fact: "myVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongEmail@elixxir.io", T: fact.Email}, + {Fact: "6502530000US", T: fact.Phone}, + }, + } + rand.Read(expectedContact.OwnershipProof) + + buff, err := expectedContact.Marshal() + if err != nil { + t.Errorf("Marshal() produced an error: %+v", err) + } + + marshalBuff, err := json.Marshal(expectedContact) + if err != nil { + t.Errorf("Marshal() produced an error: %+v", err) + } + + t.Logf("size of buff: %d", len(buff)) + t.Logf("size of marshalBuff: %d", len(marshalBuff)) + t.Logf("ratio: %.2f%%", float32(len(buff))/float32(len(marshalBuff))*100) + t.Logf("%s", marshalBuff) + + if len(marshalBuff) < len(buff) { + t.Errorf("JSON Contact smaller than marshaled contact."+ + "\nJSON: %d\nmarshal: %d", len(marshalBuff), len(buff)) + } +} + +func getCycInt(size int) *cyclic.Int { + var primeString = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + + "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + + "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + + "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + + "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + + "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + + "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" + + "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" + + "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" + + "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" + + "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" + + "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" + + "FFFFFFFFFFFFFFFF" + buff, err := csprng.GenerateInGroup([]byte(primeString), size, csprng.NewSystemRNG()) + if err != nil { + panic(err) + } + + grp := cyclic.NewGroup(large.NewIntFromString(primeString, 16), large.NewInt(2)).NewIntFromBytes(buff) + return grp +}