From e154bef33ec5a53fa559cccc1972d6e1ba2d0902 Mon Sep 17 00:00:00 2001 From: a_bennassar Date: Wed, 20 May 2020 12:47:48 +0200 Subject: [PATCH 01/10] WIP --- go/go.mod | 44 +--- go/go.sum | 350 ++++++------------------- go/iden3mobile/identity.go | 12 +- go/iden3mobile/identity_test.go | 16 +- go/iden3mobile/ticketshandlers_test.go | 40 ++- go/mockupserver/mockupserver.go | 23 +- 6 files changed, 149 insertions(+), 336 deletions(-) diff --git a/go/go.mod b/go/go.mod index e63a586..09bb3f1 100644 --- a/go/go.mod +++ b/go/go.mod @@ -9,54 +9,28 @@ require ( github.com/dghubble/sling v1.3.0 github.com/edsrzf/mmap-go v1.0.0 // indirect github.com/elastic/gosigar v0.10.5 // indirect - github.com/ethereum/go-ethereum v1.9.11 + github.com/ethereum/go-ethereum v1.9.13 github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/gin-gonic/gin v1.5.0 github.com/golang/protobuf v1.3.3 // indirect github.com/google/uuid v1.1.1 + github.com/gorilla/websocket v1.4.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/iden3/go-iden3-core v0.0.7 - github.com/iden3/go-iden3-crypto v0.0.4 - github.com/iden3/go-iden3-servers v0.0.1 - github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200406142900-4d2cd944c56c - github.com/ipfs/go-log v1.0.1 // indirect + github.com/iden3/go-circom-prover-verifier v0.0.0-20200515100033-bedd64cc7062 + github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463 + github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f + github.com/iden3/go-iden3-servers v0.0.2-0.20200518153723-bac79e820d3b + github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3 github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect - github.com/libp2p/go-conn-security v0.1.0 // indirect - github.com/libp2p/go-libp2p v6.0.23+incompatible // indirect - github.com/libp2p/go-libp2p-circuit v0.1.4 // indirect - github.com/libp2p/go-libp2p-host v0.1.0 // indirect - github.com/libp2p/go-libp2p-interface-connmgr v0.1.0 // indirect - github.com/libp2p/go-libp2p-interface-pnet v0.1.0 // indirect - github.com/libp2p/go-libp2p-nat v0.0.5 // indirect - github.com/libp2p/go-libp2p-net v0.1.0 // indirect - github.com/libp2p/go-libp2p-peerstore v0.1.4 // indirect - github.com/libp2p/go-libp2p-protocol v0.1.0 // indirect - github.com/libp2p/go-libp2p-secio v0.2.1 // indirect - github.com/libp2p/go-libp2p-transport v0.1.0 // indirect - github.com/libp2p/go-stream-muxer v0.1.0 // indirect - github.com/libp2p/go-ws-transport v0.2.0 // indirect github.com/mattn/go-runewidth v0.0.8 // indirect - github.com/multiformats/go-multiaddr-dns v0.2.0 // indirect - github.com/multiformats/go-multistream v0.1.1 // indirect github.com/olekukonko/tablewriter v0.0.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/tsdb v0.10.0 // indirect github.com/rs/cors v1.7.0 // indirect - github.com/sirupsen/logrus v1.4.2 + github.com/sirupsen/logrus v1.5.0 github.com/status-im/keycard-go v0.0.0-20200107115650-f38e9a19958e // indirect - github.com/stretchr/testify v1.4.0 - github.com/whyrusleeping/go-smux-multiplex v3.0.16+incompatible // indirect - github.com/whyrusleeping/go-smux-multistream v2.0.2+incompatible // indirect - github.com/whyrusleeping/go-smux-yamux v2.0.9+incompatible // indirect - github.com/whyrusleeping/yamux v1.2.0 // indirect - golang.org/x/crypto v0.0.0-20200214034016-1d94cc7ab1c6 // indirect - golang.org/x/mobile v0.0.0-20200123024942-82c397c4c527 // indirect - golang.org/x/net v0.0.0-20200202094626-16171245cfb2 // indirect - golang.org/x/sys v0.0.0-20200217220822-9197077df867 // indirect + github.com/stretchr/testify v1.5.1 gopkg.in/go-playground/validator.v9 v9.29.1 - gopkg.in/yaml.v2 v2.2.4 ) - -// replace github.com/iden3/go-iden3-core => ../../go-iden3-core diff --git a/go/go.sum b/go/go.sum index a1eeb89..11d2a9e 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,5 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= +gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= @@ -19,6 +21,7 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.23.1/go.mod h1:XLH1GYJnLVE0XCr6KdJGVJRTwY30moWNJ4sERjXX6fs= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -34,6 +37,7 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apilayer/freegeoip v3.5.0+incompatible/go.mod h1:CUfFqErhFhXneJendyQ/rRcuA8kH8JxHvYnbOozmlCU= github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= github.com/aristanetworks/glog v0.0.0-20180419172825-c15b03b3054f/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= @@ -43,7 +47,6 @@ github.com/aristanetworks/goarista v0.0.0-20190712234253-ed1100a1c015/go.mod h1: github.com/aristanetworks/goarista v0.0.0-20200214154357-2151774b0d85 h1:rfR8WbuDIt/V/6fL10HK7W96LklFLURt3Cx6JfaiAPg= github.com/aristanetworks/goarista v0.0.0-20200214154357-2151774b0d85/go.mod h1:44dWbABeoIioVE5T1/2uxhhnmPU/1lswsJATrh60Mv4= github.com/aristanetworks/splunk-hec-go v0.3.3/go.mod h1:1VHO9r17b0K7WmOlLb9nTk/2YanvOEnLMUgsFrxBROc= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -51,8 +54,6 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= 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= @@ -77,13 +78,7 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= -github.com/codemodus/kace v0.5.1/go.mod h1:coddaHoX1ku1YFSe4Ip0mL9kQjJvKkzb9CfIdG1YR04= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -96,18 +91,15 @@ github.com/dchest/blake512 v1.0.0/go.mod h1:FV1x7xPPLWukZlpDpWQ88rF/SFwZ5qbskrzh github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= github.com/dghubble/sling v1.3.0 h1:pZHjCJq4zJvc6qVQ5wN1jo5oNZlNE0+8T/h0XeXBUKU= github.com/dghubble/sling v1.3.0/go.mod h1:XXShWaBWKzNLhu2OxikSNFrlsvowtz4kyRuXUG7oQKY= -github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.13.1/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dop251/goja v0.0.0-20200106141417-aaec0e7bde29/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= @@ -122,13 +114,9 @@ github.com/elastic/gosigar v0.10.4/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTy github.com/elastic/gosigar v0.10.5 h1:GzPQ+78RaAb4J63unidA/JavQRKrB6s8IOzN6Ib59jo= github.com/elastic/gosigar v0.10.5/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/ethereum/go-ethereum v1.8.27/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY= -github.com/ethereum/go-ethereum v1.9.3 h1:v3bE4abkXknLcyWCf4TRFn+Ecmm9thPtfLFvTEQ+1+U= -github.com/ethereum/go-ethereum v1.9.3/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY= -github.com/ethereum/go-ethereum v1.9.10 h1:jooX7tWcscpC7ytufk73t9JMCeJQ7aJF2YmZJQEuvFo= -github.com/ethereum/go-ethereum v1.9.10/go.mod h1:lXHkVo/MTvsEXfYsmNzelZ8R1e0DTvdk/wMZJIRpaRw= -github.com/ethereum/go-ethereum v1.9.11 h1:Z0jugPDfuI5qsPY1XgBGVwikpdFK/ANqP7MrYvkmk+A= -github.com/ethereum/go-ethereum v1.9.11/go.mod h1:7oC0Ni6dosMv5pxMigm6s0hN8g4haJMBnqmmo0D9YfQ= +github.com/ethereum/go-ethereum v1.9.12/go.mod h1:PvsVkQmhZFx92Y+h2ylythYlheEDt/uBgFbl61Js/jo= +github.com/ethereum/go-ethereum v1.9.13 h1:rOPqjSngvs1VSYH2H+PMPiWt4VEulvNRbFgqiGqJM3E= +github.com/ethereum/go-ethereum v1.9.13/go.mod h1:qwN9d1GLyDh0N7Ab8bMGd0H9knaji2jOBm2RrMGjXls= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= @@ -151,20 +139,12 @@ github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/ github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-pg/pg/v9 v9.0.0-beta.14/go.mod h1:T2Sr6bpTCOr2lUqOUMiXLMJqZHSUBKk1LdgSqjwhZfA= -github.com/go-pg/pg/v9 v9.0.3/go.mod h1:Tm/Q3Vt6gdQOH6TTN1H/xLlIXc+Qrka7TZ6uREtu/eA= -github.com/go-pg/pg/v9 v9.1.2/go.mod h1:AOJqkP8C4YfJgLOA5zSoV0DGHGo+M3G2nXXLeXkiyNs= -github.com/go-pg/urlstruct v0.1.0/go.mod h1:2Nag+BIny6G/KYCkdt++ZnqU/VinzimGapKfs4kwlN0= -github.com/go-pg/urlstruct v0.2.6/go.mod h1:dxENwVISWSOX+k87hDt0ueEJadD+gZWv3tHzwfmZPu8= -github.com/go-pg/urlstruct v0.2.8/go.mod h1:/XKyiUOUUS3onjF+LJxbfmSywYAdl6qMfVbX33Q8rgg= -github.com/go-pg/zerochecker v0.1.1/go.mod h1:NJZ4wKL0NmTtz0GKCoJ8kym6Xn/EQzXRl2OnAe7MmDo= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= @@ -172,21 +152,20 @@ github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTM github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator v9.31.0+incompatible h1:UA72EPEogEnq76ehGdEDp4Mit+3FDh548oRqwVgNsHA= github.com/go-playground/validator/v10 v10.1.0 h1:LNfPbVcg93V/91tkAQH8nbFbFn7u2X4hHnLMeRZHIMM= github.com/go-playground/validator/v10 v10.1.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc= github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -198,33 +177,35 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pO github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/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.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +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= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v0.0.0-20190902214650-641ae197eec7/go.mod h1:Au3iQ8DvDis8hZ4q2OzRcaKYlAsPt+fYvib5q4nIqu4= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -232,106 +213,56 @@ github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOo github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/iden3/go-iden3-core v0.0.6 h1:nUjJDmMiOSiIkE2CLMu5cD1NJMI531CT1XO1UAoAUgA= -github.com/iden3/go-iden3-core v0.0.7-0.20200210213229-6e50d57f79db h1:E1hPtUEeVPWtwmiIyiPdqKA4VgrI8HiFl6RSBk86CI0= -github.com/iden3/go-iden3-core v0.0.7-0.20200210213229-6e50d57f79db/go.mod h1:R+YOx0l6ilwlvWDm3VoA6azkG561qfcn1ajJ+oVESPo= -github.com/iden3/go-iden3-core v0.0.7-0.20200213165305-161fa5bfa30f/go.mod h1:ByKO7a6p/2eAf/zSLthR5SIjQMIKrKCiB3WNQxHjdCg= -github.com/iden3/go-iden3-core v0.0.7-0.20200217140153-bf229e481544 h1:qjPVB8eQPotb2cdje8pD7MOJm0iHO8uoKaEBkcdqTL0= -github.com/iden3/go-iden3-core v0.0.7-0.20200217140153-bf229e481544/go.mod h1:ByKO7a6p/2eAf/zSLthR5SIjQMIKrKCiB3WNQxHjdCg= -github.com/iden3/go-iden3-core v0.0.7-0.20200220191813-dda57ad3ec30 h1:I+PMQZDu25ZwtjTYprjWKDQyAEAu0DHzGo0x8nIFLEU= -github.com/iden3/go-iden3-core v0.0.7-0.20200220191813-dda57ad3ec30/go.mod h1:ByKO7a6p/2eAf/zSLthR5SIjQMIKrKCiB3WNQxHjdCg= -github.com/iden3/go-iden3-core v0.0.7-0.20200221170011-5d44e8c442e6 h1:0Y4nzaxm8QFoPdcRsUTNFj0Tzchd8hFiB2ylOTw8u7A= -github.com/iden3/go-iden3-core v0.0.7-0.20200221170011-5d44e8c442e6/go.mod h1:ByKO7a6p/2eAf/zSLthR5SIjQMIKrKCiB3WNQxHjdCg= -github.com/iden3/go-iden3-core v0.0.7-0.20200302110202-58bdf66e7182 h1:FrrXhNNqKSYq5G0qRCufxphfJNdaLmxVN+a60dQlq8Q= -github.com/iden3/go-iden3-core v0.0.7-0.20200302110202-58bdf66e7182/go.mod h1:ByKO7a6p/2eAf/zSLthR5SIjQMIKrKCiB3WNQxHjdCg= -github.com/iden3/go-iden3-core v0.0.7-0.20200311112557-02d96bb16b0f h1:KgFUTa3a0o/hC8Adoge31IlbLPjbVz1Jk3voZCZUxIE= -github.com/iden3/go-iden3-core v0.0.7-0.20200311112557-02d96bb16b0f/go.mod h1:f3Aus5GO8SCmTN3E/3c8Se2d1T6KCe42AIAjWUNOylY= -github.com/iden3/go-iden3-core v0.0.7-0.20200317112119-d48b3bad8bf7 h1:N1M4pvwpyPDFYnr2xVEuDyoioqKdiiWQAmiHbz3aEKA= -github.com/iden3/go-iden3-core v0.0.7-0.20200317112119-d48b3bad8bf7/go.mod h1:O2tkDC+ylZvWHngzs1hX3QAwZj+bgb2Q+tXUnQFpb8Q= -github.com/iden3/go-iden3-core v0.0.7 h1:XIrHu4s1PUIg/TsZMQZ42Sr4hM5pifD9OYBz5xT9pxU= -github.com/iden3/go-iden3-core v0.0.7/go.mod h1:N9xiQvwx5EZhrVuO0hW8GBF9Uy0ZbONdhguPHSC+wQg= -github.com/iden3/go-iden3-crypto v0.0.3-0.20190831180703-c95c95b7b161 h1:m/JbZo+lzlIX02tmV12mKa6010dfJegs2jCsgB23udM= -github.com/iden3/go-iden3-crypto v0.0.3-0.20190831180703-c95c95b7b161/go.mod h1:LLcgB7DLWAUs+8eBSKne+ZHy5z7xtAmlYlEz0M9M8gE= -github.com/iden3/go-iden3-crypto v0.0.3-0.20200304173417-e8be761ec71a h1:lAnni8ChTFwJ9q1Qx3q4XsPknDJnaOq00WYt6pgP7As= -github.com/iden3/go-iden3-crypto v0.0.3-0.20200304173417-e8be761ec71a/go.mod h1:LLcgB7DLWAUs+8eBSKne+ZHy5z7xtAmlYlEz0M9M8gE= -github.com/iden3/go-iden3-crypto v0.0.3 h1:/Z4DHEPTKvWSM0F1DOp9tj9cQmifc3F+4QK2Pzu9Pqw= -github.com/iden3/go-iden3-crypto v0.0.3/go.mod h1:LLcgB7DLWAUs+8eBSKne+ZHy5z7xtAmlYlEz0M9M8gE= -github.com/iden3/go-iden3-crypto v0.0.4 h1:rGQEFBvX6d4fDxqkQTizVq5UefB+xdZAg8j5FQ6uv6g= -github.com/iden3/go-iden3-crypto v0.0.4/go.mod h1:LLcgB7DLWAUs+8eBSKne+ZHy5z7xtAmlYlEz0M9M8gE= -github.com/iden3/go-iden3-servers v0.0.0-20200219150204-1856e87ce0d8 h1:iDWf/ZDOjca2zrwzFa/SfzRv4KVMmhbm0tuB6TVteGo= -github.com/iden3/go-iden3-servers v0.0.0-20200219150204-1856e87ce0d8/go.mod h1:CrAeAV1igceO4NxhLQPQiOC+2X7HQ6P9dvhONOriAxk= -github.com/iden3/go-iden3-servers v0.0.1 h1:ijCOLszd+beqPLWjtuSFeGUSHzjOsl5+zbsNJ33nEj4= -github.com/iden3/go-iden3-servers v0.0.1/go.mod h1:QpqhvmZv7w7U6T4sBtG2ARaKBiDG0ntwxR/B37wcIzE= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200221101854-f46aead612dc h1:oVXfGyuVrfL+4q+vXFSePMzuXK1KUKcisNtOG413M+o= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200221101854-f46aead612dc/go.mod h1:mcEUdR6WJbMdCGFvIVVPWOdkr0vD3bI4MiKaEJQLGjw= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200221114214-c2fb4438638d h1:Nq0kbkVAg9fvYi976aUZREXrjw2iYLag9+SQzcm2qXI= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200222110233-acd5cba4952c h1:jKn6A0jDHROrFblpa7jEiX5kieZGgNGlQYEi0Q+lZVg= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200222110233-acd5cba4952c/go.mod h1:FBhTGxbyQIy+nyiNNV66Hri0NEOXIYZDnbOon39IaKo= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200302110205-b9e90017fb09 h1:9H0+86l3jiRhX0fLHq9aMhNCW2p0Ruw783I5SUEa0jg= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200309110641-43ad8a65375f h1:vT40UbHNOIT8oKO1o4oNEO5EA9WJDwVeD/mvLiN2eFc= -github.com/iden3/go-iden3-servers-demo v0.0.0-20200309110641-43ad8a65375f/go.mod h1:FBhTGxbyQIy+nyiNNV66Hri0NEOXIYZDnbOon39IaKo= -github.com/iden3/go-iden3-servers-demo v0.0.1 h1:zC4D0mB33VjOjvYOp/mdZdMAmJo0lb7o8pAy5Pz+RvI= -github.com/iden3/go-iden3-servers-demo v0.0.1/go.mod h1:D/QsoXA+1kORY27fbqt5xLHkEYd9IKWkrNnn4aHkChI= -github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200406142900-4d2cd944c56c h1:bg3a6e8iF8iLU7V83MWm8gRq7A2/hvHodfOMtUnMOm8= -github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200406142900-4d2cd944c56c/go.mod h1:GgfPm228cNJFrdwGp6qGQrPjDj0RhJi57Dr6HY+W1/w= +github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200515100033-bedd64cc7062 h1:ubD/0wj/izgCFI3sqRXtpcjvpOGGC4egotEEZn1kqUI= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200515100033-bedd64cc7062/go.mod h1:ZGStP/GSsKbIaLEowo7JmqnWgneFAapA4NrZakHcUk4= +github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429 h1:UTGpt2GCsNNC2sSYS6iBUDnR75HiCkogHdVSI2JyUsk= +github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429/go.mod h1:c3FEU+iwM55k0lvzpwkCk5ljmv+gV2nnkCVHiuUDxFo= +github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463 h1:faZIi4aAYXgsSrF9uevL+eI1JnZ1vE0aFu3AU8Vuedk= +github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463/go.mod h1:mMnPlXVspF49lxOb7/fqp7VCfD/YYEBvAjnUt+dkM8s= +github.com/iden3/go-iden3-crypto v0.0.5-0.20200421133134-14c3144613d4/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= +github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f h1:geZ9S70cAAo/Dtu9LvUKjWs0rBsDZjWdYzSCkNc+gVE= +github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= +github.com/iden3/go-iden3-servers v0.0.2-0.20200515143026-71f0da093a96/go.mod h1:2m/BAy6OUeA/TV39Prpa4yJh3pOJsnrvHGiE97vxnAI= +github.com/iden3/go-iden3-servers v0.0.2-0.20200518153723-bac79e820d3b h1:oXi0X3NMxq9JUVJku4/C1tiCqixdG8lCRH5QEoJgQPU= +github.com/iden3/go-iden3-servers v0.0.2-0.20200518153723-bac79e820d3b/go.mod h1:2m/BAy6OUeA/TV39Prpa4yJh3pOJsnrvHGiE97vxnAI= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3 h1:LCGOrwIKMrKxxYA4AawSZiJa5hqAqcABjfFF7+jfV/o= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3/go.mod h1:h3c3VvlEj8cNqzsRWD0nAgCfBf4IhDXB6+no4emmS44= github.com/iden3/go-public-key-encryption v0.0.0-20200129111956-c21e08c0ca6d/go.mod h1:ywEbbcgoETcOzZQ7YedY67DfG8tPuHbH89yn0zhjjeU= -github.com/iden3/iden3-mobile v0.0.0-20191127154806-c4cb71016c2c h1:r4UQBNQXViT+0DzVk6rrhrLd47jjmmEc+7g9B9d8z0I= -github.com/iden3/iden3-mobile v0.0.0-20200304104952-868f15829d6f h1:Zh4JwxjanaWPYlHzdBOni4n7wFNRSdyvhdCByyliKHI= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/iden3/go-wasm3 v0.0.0-20200407092348-656263e6984f/go.mod h1:j+TcAB94Dfrjlu5kJt83h2OqAU+oyNUTwNZnQyII1sI= +github.com/iden3/go-wasm3 v0.0.0-20200514131940-7bb78777b8ec h1:uQR2IqYOH/y0f4NNdYnw5iw6CCVbWiuA2iVd0pdyXWU= +github.com/iden3/go-wasm3 v0.0.0-20200514131940-7bb78777b8ec/go.mod h1:j+TcAB94Dfrjlu5kJt83h2OqAU+oyNUTwNZnQyII1sI= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.7.8/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= -github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= -github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk= -github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= -github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8= github.com/ipfs/go-ipfs-api v0.0.3/go.mod h1:EgBqlEzrA22SnNKq4tcP2GDPKxbfF+uRTd2YFmR1uUk= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= github.com/ipfs/go-ipfs-files v0.0.6/go.mod h1:lVYE6sgAdtZN5825beJjSAHibw7WOBNPDWz5LaJeukg= github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.1/go.mod h1:HuWlQttfN6FWNHRhlY5yMk/lW7evQC0HHGOxEwMRR8I= -github.com/ipfs/go-log/v2 v2.0.1/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= github.com/ipfsconsortium/go-ipfsc v0.0.0-20190116161836-3629ecc1f76f/go.mod h1:4MbfcV8YX3CWjkWgUIH4vEVk002kMJlOEmhoSJP8SeE= -github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= -github.com/jackpal/go-nat-pmp v1.0.1 h1:i0LektDkO1QlrTm/cSuP+PyBCDnYvjPLGl4LdWEMiaA= -github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jamesruan/sodium v0.0.0-20181216154042-9620b83ffeae/go.mod h1:GZ0frHfchUw9cjP3CK1J7+M74KNo7zrhffQxTeuf5I8= -github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/karalabe/usb v0.0.0-20190819132248-550797b1cad8 h1:VhnqxaTIudc9IWKx8uXRLnpdSb9noCEj+vHacjmhp68= -github.com/karalabe/usb v0.0.0-20190819132248-550797b1cad8/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 h1:ZHuwnjpP8LsVsUYqTqeVAI+GfDfJ6UNPrExZF+vX/DQ= github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= @@ -340,7 +271,6 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGi github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -353,78 +283,18 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security v0.1.0/go.mod h1:NQdPF4opCZ5twtEUadzPL0tNSdkrbFc/HmLO7eWqEzY= -github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= -github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p v6.0.23+incompatible/go.mod h1:CyUlFa6Mw04PkmMg8gBIlHUl8j3TrEiA6oFiF4SgD8w= -github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU= -github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= -github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7OlyhWZ3nls5d2I= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0= -github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= -github.com/libp2p/go-libp2p-host v0.1.0/go.mod h1:5+fWuLbDn8OxoxPN3CV0vsLe1hAKScSMbT84qRfxum8= -github.com/libp2p/go-libp2p-interface-connmgr v0.1.0/go.mod h1:bmmppYG/Bc6FTdLYEdpuSfifDa5Nr+5Ia1Mm6lE2+Eg= -github.com/libp2p/go-libp2p-interface-pnet v0.1.0/go.mod h1:8+FQ08+xMxR6BjG0tUZoQzKxPAV2W7ck6IxjCWqZ6ek= -github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= github.com/libp2p/go-libp2p-metrics v0.1.0/go.mod h1:rpoJmXWFxnj7qs5sJ02sxSzrhaZvpqBn8GCG6Sx6E1k= -github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo= -github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= -github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= -github.com/libp2p/go-libp2p-net v0.1.0/go.mod h1:R5VZbutk75tkC5YJJS61OCO1NWoajxYjCEV2RoHh3FY= github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= -github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= -github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs= -github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= -github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g= -github.com/libp2p/go-libp2p-secio v0.2.1/go.mod h1:cWtZpILJqkqrSkiYcDBh5lA3wbT2Q+hz3rJQq3iftD8= -github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= -github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.1.0/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-transport v0.1.0/go.mod h1:iL3c2tV3OVldqSwJrds8pmIWf4t/TwiF+eI/mhw/jjQ= -github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= -github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8= -github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= -github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= -github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= -github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-nat v0.0.4/go.mod h1:Nmw50VAvKuk38jUBcmNh6p9lUJLoODbJRvYAa/+KSDo= -github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= -github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= -github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs= -github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= -github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ= -github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= -github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= -github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= -github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -436,47 +306,34 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0= github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.0 h1:iDwIio/3gk2QtLLEsqU5lInaMzos0hDTz8a6lazSFVw= +github.com/mitchellh/mapstructure v1.3.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= github.com/multiformats/go-multiaddr v0.1.0/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= -github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.0.1/go.mod h1:nw6HSxNmCIQH27XPGBuX+d1tnvM7ihcFwHMSstNAVUU= -github.com/multiformats/go-multiaddr-net v0.1.0/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= github.com/multiformats/go-multiaddr-net v0.1.1/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= @@ -489,25 +346,23 @@ github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/oschwald/maxminddb-golang v1.4.0/go.mod h1:3jhIUymTJ5VREKyIhWm66LJiQt04F0UCDdodShpjWsY= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -517,14 +372,18 @@ github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6J github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= @@ -543,32 +402,21 @@ github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/segmentio/encoding v0.1.8/go.mod h1:RWhr02uzMB9gQC1x+MfYxedtmBibb9cZ6Vv9VxRSSbw= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= +github.com/sirupsen/logrus v1.5.0 h1:1N5EYkVAPEywqZRJd7cwnRtCb6xJx7NH3T3WUTF980Q= +github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -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.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/status-im/keycard-go v0.0.0-20190424133014-d95853db0f48 h1:ju5UTwk5Odtm4trrY+4Ca4RMj5OyXbmVeDAVad2T0Jw= @@ -587,6 +435,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs= @@ -600,75 +450,47 @@ github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vmihailenco/msgpack/v4 v4.3.1/go.mod h1:DuaveEe48abshDmz5UBKyZ+yDugvaeFk5ayfrewUOaw= -github.com/vmihailenco/tagparser v0.1.0/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= -github.com/whyrusleeping/go-smux-multiplex v3.0.16+incompatible/go.mod h1:34LEDbeKFZInPUrAG+bjuJmUXONGdEFW7XL0SpTY1y4= -github.com/whyrusleeping/go-smux-multistream v2.0.2+incompatible/go.mod h1:dRWHHvc4HDQSHh9gbKEBbUZ+f2Q8iZTPG3UOGYODxSQ= -github.com/whyrusleeping/go-smux-yamux v2.0.9+incompatible/go.mod h1:6qHUzBXUbB9MXmw3AUdB52L8sEb/hScCqOdW2kj/wuI= -github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c/go.mod h1:xxcJeBb7SIUl/Wzkz1eVKJE/CB34YNrqX2TQI6jY9zs= -github.com/whyrusleeping/yamux v1.2.0/go.mod h1:Cgw3gpb4DrDZ1FrP/5pxg/cpiY54Gr5uCXwUylwi2GE= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xtaci/kcp-go v5.4.5+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191128160524-b544559bb6d1/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200214034016-1d94cc7ab1c6 h1:Sy5bstxEqwwbYs6n0/pBuxKENqOeZUgD45Gp3Q3pqLg= -golang.org/x/crypto v0.0.0-20200214034016-1d94cc7ab1c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 h1:QmwruyY+bKbDDL0BaglrbZABEali68eoMFhTZpCjYVA= +golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20200123024942-82c397c4c527 h1:470B1IvA7JOANiTULBeEJCIcp53VWOsgckscR836cN8= -golang.org/x/mobile v0.0.0-20200123024942-82c397c4c527/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= +golang.org/x/mobile v0.0.0-20200329125638-4c31acba0007/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -677,24 +499,22 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/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-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190420063019-afa5a82059c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/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= @@ -706,7 +526,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -716,49 +536,46 @@ golang.org/x/sys v0.0.0-20190302025703-b6889370fb10/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813066441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867 h1:JoRuNIf+rpHl+VhScRQQvzbHed86tKkqwPMV34T8myw= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190912185636-87d9f09c5d89/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69 h1:yBHHx+XZqXJBm6Exke3N7V9gnlsyXxoCPEb1yVenjfk= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= @@ -783,15 +600,13 @@ gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3M gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190709231704-1e4459ed25ff h1:uuol9OUzSvZntY1v963NAbVd7A+PHLMz1FlCe3Lorcs= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190709231704-1e4459ed25ff/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9 h1:ITeyKbRetrVzqR3U1eY+ywgp7IBspGd1U/bkwd1gWu4= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= @@ -803,6 +618,9 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -mellium.im/sasl v0.2.1/go.mod h1:ROaEDLQNuf9vjKqE1SrAfnsobm2YKXT1gnN1uDp1PjQ= +xorm.io/builder v0.3.7/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/xorm v1.0.1/go.mod h1:o4vnEsQ5V2F1/WK6w4XTwmiWJeGj82tqjAnHe44wVHY= diff --git a/go/iden3mobile/identity.go b/go/iden3mobile/identity.go index 57289dc..0e2ac61 100644 --- a/go/iden3mobile/identity.go +++ b/go/iden3mobile/identity.go @@ -177,7 +177,14 @@ func newIdentityLoad(storePath, pass string, idenPubOnChain idenpubonchain.IdenP return nil, fmt.Errorf("Error unlocking babyjub key from keystore: %w", err) } // Load existing Identity (holder) - holdr, err := holder.Load(storage, keyStore, idenPubOnChain, nil, readerhttp.NewIdenPubOffChainHttp()) + holdr, err := holder.Load( + storage, + keyStore, + idenPubOnChain, + nil, + nil, + readerhttp.NewIdenPubOffChainHttp(), + ) if err != nil { return nil, err } @@ -223,7 +230,8 @@ func (i *Identity) RequestClaim(baseUrl, data string) (*Ticket, error) { res := issuerMsg.ResClaimRequest{} if err := httpClient.DoRequest(httpClient.NewRequest().Path( "claim/request").Post("").BodyJSON(&issuerMsg.ReqClaimRequest{ - Value: data, + Value: data, + HolderID: i.id.ID(), }), &res); err != nil { return nil, err } diff --git a/go/iden3mobile/identity_test.go b/go/iden3mobile/identity_test.go index 434b091..30d0e9f 100644 --- a/go/iden3mobile/identity_test.go +++ b/go/iden3mobile/identity_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + zktypes "github.com/iden3/go-circom-prover-verifier/types" idenpubonchainlocal "github.com/iden3/go-iden3-core/components/idenpubonchain/local" log "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" @@ -70,18 +71,10 @@ func (tb *TimeBlock) Block() uint64 { var timeBlock TimeBlock func TestMain(m *testing.M) { - // Load config file - // dat, err := ioutil.ReadFile("./config.yml") - // if err != nil { - // panic(err) - // } - // if err := yaml.Unmarshal(dat, &c); err != nil { - // panic(err) - // } c = config{ - Web3Url: "https://foo.bar", - IssuerUrl: "http://127.0.0.1:1234/", - VerifierUrl: "http://127.0.0.1:1234/", + Web3Url: "https://goerli.infura.io/v3/8c0749f9e58f4369909af7ef70e9b15a", + IssuerUrl: "http://127.0.0.1:6100/api/unstable/", + VerifierUrl: "http://127.0.0.1:6200/", VerifierAttempts: 5, VerifierRetryPeriod: 6, HolderTicketPeriod: 1000, @@ -89,6 +82,7 @@ func TestMain(m *testing.M) { idenPubOnChain = idenpubonchainlocal.New( timeBlock.Time, timeBlock.Block, + &zktypes.Vk{}, ) // Create a tmp directory to store test files // Run tests diff --git a/go/iden3mobile/ticketshandlers_test.go b/go/iden3mobile/ticketshandlers_test.go index d932708..f39f2cc 100644 --- a/go/iden3mobile/ticketshandlers_test.go +++ b/go/iden3mobile/ticketshandlers_test.go @@ -69,16 +69,16 @@ func TestHolderHandlers(t *testing.T) { } }() - // Start mockup server - server := mockupserver.Serve(t, &mockupserver.Conf{ - IP: "127.0.0.1", - Port: "1234", - TimeToAproveClaim: 1 * time.Second, - TimeToPublish: 2 * time.Second, - }, - idenPubOnChain, - ) - time.Sleep(1 * time.Second) + // // Start mockup server + // server := mockupserver.Serve(t, &mockupserver.Conf{ + // IP: "127.0.0.1", + // Port: "1234", + // TimeToAproveClaim: 1 * time.Second, + // TimeToPublish: 2 * time.Second, + // }, + // idenPubOnChain, + // ) + // time.Sleep(1 * time.Second) expectedEvents = make(map[string]testEvent) // Create two new identities without extra claims @@ -89,24 +89,24 @@ func TestHolderHandlers(t *testing.T) { require.Nil(t, err) rmDirs = append(rmDirs, dir2) - id1, err := NewIdentityTest(dir1, "pass_TestHolder1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id1, err := NewIdentityTest(dir1, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) - id2, err := NewIdentityTest(dir2, "pass_TestHolder2", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id2, err := NewIdentityTest(dir2, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Request claim - t1, err := id1.RequestClaim(c.IssuerUrl, id1.id.ID().String()) + t1, err := id1.RequestClaim(c.IssuerUrl, randomBase64String(80)) require.Nil(t, err) expectedEvents[t1.Id] = testEvent{Typ: t1.Type} - t2, err := id2.RequestClaim(c.IssuerUrl, id2.id.ID().String()) + t2, err := id2.RequestClaim(c.IssuerUrl, randomBase64String(80)) require.Nil(t, err) expectedEvents[t2.Id] = testEvent{Typ: t2.Type} // Test that tickets are persisted by reloading identities id1.Stop() id2.Stop() - id1, err = NewIdentityTestLoad(dir1, "pass_TestHolder1", c.Web3Url, c.HolderTicketPeriod, nil) + id1, err = NewIdentityTestLoad(dir1, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, nil) require.Nil(t, err) - id2, err = NewIdentityTestLoad(dir2, "pass_TestHolder2", c.Web3Url, c.HolderTicketPeriod, nil) + id2, err = NewIdentityTestLoad(dir2, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, nil) require.Nil(t, err) // Wait for the events that will get triggered on issuer response nAtempts := 10 @@ -131,13 +131,11 @@ func TestHolderHandlers(t *testing.T) { } time.Sleep(time.Duration(c.VerifierRetryPeriod) * time.Second) } - if i == c.VerifierAttempts { - panic(fmt.Errorf("Reached maximum number of loops for id{1,2}.ProveClaim")) - } + require.NotEqual(t, c.VerifierAttempts, i) id1.Stop() id2.Stop() - err = server.Shutdown(context.Background()) + // err = server.Shutdown(context.Background()) require.Nil(t, err) } @@ -226,7 +224,7 @@ func TestStressIdentity(t *testing.T) { } claimsLen := n * m testStressIdentityWg.Add(claimsLen) - iden, err := NewIdentityTest(dir1, "pass_TestHolder1", c.Web3Url, 400, NewBytesArray(), ha) + iden, err := NewIdentityTest(dir1, "pass_TestHolder_1", c.Web3Url, 400, NewBytesArray(), ha) require.Nil(t, err) // Request claims diff --git a/go/mockupserver/mockupserver.go b/go/mockupserver/mockupserver.go index 4e02131..35be9c0 100644 --- a/go/mockupserver/mockupserver.go +++ b/go/mockupserver/mockupserver.go @@ -19,6 +19,7 @@ import ( "github.com/iden3/go-iden3-core/identity/issuer" "github.com/iden3/go-iden3-core/keystore" "github.com/iden3/go-iden3-core/merkletree" + zkutils "github.com/iden3/go-iden3-core/utils/zk" "github.com/iden3/go-iden3-servers-demo/servers/issuerdemo/messages" issuerMsg "github.com/iden3/go-iden3-servers-demo/servers/issuerdemo/messages" verifierMsg "github.com/iden3/go-iden3-servers-demo/servers/verifier/messages" @@ -115,7 +116,27 @@ func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, require.Nil(t, err) _, err = issuer.Create(cfg, kOp, []claims.Claimer{}, storage, keyStore) require.Nil(t, err) - is, err := issuer.Load(storage, keyStore, idenPubOnChain, idenPubOffChainWrite) + require.Nil(t, err) + idenStateZkProofConf := &issuer.IdenStateZkProofConf{ + Levels: 16, + Files: *zkutils.NewZkFiles( + "http://161.35.72.58:9000/circuit-idstate/", + "/tmp/iden3/idenstatezk", + zkutils.ZkFilesHashes{ + ProvingKey: "2c72fceb10323d8b274dbd7649a63c1b6a11fff3a1e4cd7f5ec12516f32ec452", + VerificationKey: "473952ff80aef85403005eb12d1e78a3f66b1cc11e7bd55d6bfe94e0b5577640", + WitnessCalcWASM: "8eafd9314c4d2664a23bf98a4f42cd0c29984960ae3544747ba5fbd60905c41f", + }, + true, + ), + } + is, err := issuer.Load( + storage, + keyStore, + idenPubOnChain, + idenStateZkProofConf, + idenPubOffChainWrite, + ) require.Nil(t, err) return is } From 361ff64c15d9d2de3bc851da3779a588cceef1b8 Mon Sep 17 00:00:00 2001 From: a_bennassar Date: Thu, 21 May 2020 13:45:51 +0200 Subject: [PATCH 02/10] WIP --- go/iden3mobile/identity.go | 134 +++++++++++++++++++++---- go/iden3mobile/identity_test.go | 18 +++- go/iden3mobile/ticketshandlers_test.go | 46 ++++++--- 3 files changed, 156 insertions(+), 42 deletions(-) diff --git a/go/iden3mobile/identity.go b/go/iden3mobile/identity.go index 0e2ac61..4b49a84 100644 --- a/go/iden3mobile/identity.go +++ b/go/iden3mobile/identity.go @@ -1,9 +1,11 @@ package iden3mobile import ( + "encoding/json" "errors" "fmt" "io" + "math/big" "os" "path" "time" @@ -11,9 +13,13 @@ import ( "github.com/google/uuid" "github.com/iden3/go-iden3-core/components/idenpuboffchain/readerhttp" "github.com/iden3/go-iden3-core/components/idenpubonchain" + "github.com/iden3/go-iden3-core/core/claims" + "github.com/iden3/go-iden3-core/core/proof" "github.com/iden3/go-iden3-core/db" "github.com/iden3/go-iden3-core/identity/holder" babykeystore "github.com/iden3/go-iden3-core/keystore" + "github.com/iden3/go-iden3-core/merkletree" + zkutils "github.com/iden3/go-iden3-core/utils/zk" "github.com/iden3/go-iden3-crypto/babyjub" issuerMsg "github.com/iden3/go-iden3-servers-demo/servers/issuerdemo/messages" verifierMsg "github.com/iden3/go-iden3-servers-demo/servers/verifier/messages" @@ -21,13 +27,14 @@ import ( ) type Identity struct { - id *holder.Holder - storage db.Storage - keyStore *babykeystore.KeyStore - ClaimDB *ClaimDB - Tickets *Tickets - stopTickets chan bool - eventMan *EventManager + id *holder.Holder + baseStorePath string + storage db.Storage + keyStore *babykeystore.KeyStore + ClaimDB *ClaimDB + Tickets *Tickets + stopTickets chan bool + eventMan *EventManager } const ( @@ -39,6 +46,7 @@ const ( credExisPrefix = "credExis" folderStore = "store" folderKeyStore = "keystore" + folderZKArtifacts = "ZKArtifacts" ) func isEmpty(path string) (bool, error) { @@ -76,6 +84,10 @@ func newIdentity(storePath, pass string, idenPubOnChain idenpubonchain.IdenPubOn } return nil, err } + ZKPath := path.Join(storePath, folderZKArtifacts) + if err := os.Mkdir(ZKPath, 0700); err != nil { + return nil, err + } storagePath := path.Join(storePath, folderStore) if err := os.Mkdir(storagePath, 0700); err != nil { return nil, err @@ -195,13 +207,14 @@ func newIdentityLoad(storePath, pass string, idenPubOnChain idenpubonchain.IdenP // Init Identity iden := &Identity{ - id: holdr, - storage: storage, - keyStore: keyStore, - Tickets: NewTickets(storage.WithPrefix([]byte(ticketPrefix))), - stopTickets: make(chan bool), - eventMan: em, - ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExisPrefix))), + id: holdr, + storage: storage, + baseStorePath: storePath, + keyStore: keyStore, + Tickets: NewTickets(storage.WithPrefix([]byte(ticketPrefix))), + stopTickets: make(chan bool), + eventMan: em, + ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExisPrefix))), } go iden.Tickets.CheckPending(iden, eventQueue, time.Duration(checkTicketsPeriodMilis)*time.Millisecond, iden.stopTickets) return iden, nil @@ -252,17 +265,11 @@ func (i *Identity) RequestClaimWithCb(baseUrl, data string, c CallbackRequestCla go func() { c.Fn(i.RequestClaim(baseUrl, data)) }() } -// ProveCredential sends a credentialValidity build from the given credentialExistance to a verifier +// ProveClaim sends a credentialValidity build from the given credentialExistance to a verifier // the callback is used to check if the verifier has accepted the credential as valid func (i *Identity) ProveClaim(baseUrl string, credID string) (bool, error) { - // TODO: add context - // Get credential existance - credExis, err := i.ClaimDB.GetCredExist(credID) - if err != nil { - return false, err - } // Build credential validity - credVal, err := i.id.HolderGetCredentialValidity(credExis) + credVal, err := i.getCredentialValidity(credID) if err != nil { return false, err } @@ -279,6 +286,89 @@ func (i *Identity) ProveClaim(baseUrl string, credID string) (bool, error) { return true, nil } +// ProveClaimZK sends a credentialValidity build from the given credentialExistance to a verifier. +// This method will generate a zero knowledge proof so the verifier can't see the content of the claim. +// The callback is used to check if the verifier has accepted the credential as valid +func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { + // Get credential existance + credExis, err := i.ClaimDB.GetCredExist(credID) + if err != nil { + return false, err + } + + // Build credential ownership zk proof + // WARNING: this is a hardcoded proof generation for a specific claim/circuit. + // In the future we will add some mechanism that can deduce how to generate an arbitrary proof. + addInputs := func(claim *merkletree.Entry) func(inputs map[string]interface{}) error { + return func(inputs map[string]interface{}) error { + var metadata claims.Metadata + metadata.Unmarshal(claim) + data := claim.Data + inputs["claimI2_3"] = []*big.Int{data[0*4+2].BigInt(), data[0*4+3].BigInt()} + inputs["claimV1_3"] = []*big.Int{data[1*4+1].BigInt(), data[1*4+2].BigInt(), data[1*4+3].BigInt()} + inputs["id"] = i.id.ID().BigInt() + inputs["revNonce"] = new(big.Int).SetUint64(uint64(metadata.RevNonce)) + + // DBG BEGIN + in, err := zkutils.InputsToMapStrings(inputs) + if err != nil { + return err + } + inJSON, err := json.MarshalIndent(in, "", " ") + if err != nil { + return err + } + fmt.Println(string(inJSON)) + // DBG END + + return nil + } + } + zkProofCredOut, err := i.id.HolderGenZkProofCredential( + credExis, + addInputs(credExis.Claim), + 4, + 16, + zkutils.NewZkFiles( + baseUrl+"credentialDemo/artifacts", + path.Join(i.baseStorePath, folderZKArtifacts), + zkutils.ZkFilesHashes{ + ProvingKey: "6d5bbfe45f36c0a9263df0236292d4d7fa4e081fa80a7801fdaefc00171a83ed", + VerificationKey: "12a730890e85e33d8bf0f2e54db41dcff875c2dc49011d7e2a283185f47ac0de", + WitnessCalcWASM: "6b3c28c4842e04129674eb71dc84d76dd8b290c84987929d54d890b7b8bed211", + }, + false, + ), + ) + if err != nil { + return false, err + } + + // Send the CredentialValidity proof to Verifier + httpClient := NewHttpClient(baseUrl) + reqVerifyZkp := verifierMsg.ReqVerifyZkp{ + ZkProof: &zkProofCredOut.ZkProofOut.Proof, + PubSignals: zkProofCredOut.ZkProofOut.PubSignals, + IssuerID: zkProofCredOut.IssuerID, + IdenStateBlockN: zkProofCredOut.IdenStateBlockN, + } + if err := httpClient.DoRequest(httpClient.NewRequest().Path( + "credentialDemo/verifyzkp").Post("").BodyJSON(&reqVerifyZkp), nil); err != nil { + return false, err + } + return true, nil +} + +func (i *Identity) getCredentialValidity(credID string) (*proof.CredentialValidity, error) { + // Get credential existance + credExis, err := i.ClaimDB.GetCredExist(credID) + if err != nil { + return nil, err + } + // Build credential validity + return i.id.HolderGetCredentialValidity(credExis) +} + type CallbackProveClaim interface { Fn(bool, error) } diff --git a/go/iden3mobile/identity_test.go b/go/iden3mobile/identity_test.go index 30d0e9f..ac9cc11 100644 --- a/go/iden3mobile/identity_test.go +++ b/go/iden3mobile/identity_test.go @@ -72,9 +72,9 @@ var timeBlock TimeBlock func TestMain(m *testing.M) { c = config{ - Web3Url: "https://goerli.infura.io/v3/8c0749f9e58f4369909af7ef70e9b15a", + Web3Url: "xxx", IssuerUrl: "http://127.0.0.1:6100/api/unstable/", - VerifierUrl: "http://127.0.0.1:6200/", + VerifierUrl: "http://127.0.0.1:6200/api/unstable/", VerifierAttempts: 5, VerifierRetryPeriod: 6, HolderTicketPeriod: 1000, @@ -105,7 +105,12 @@ func NewIdentityTest(storePath, pass, web3Url string, checkTicketsPeriodMilis in if s == nil { s = &testEventHandler{} } - return newIdentity(storePath, pass, idenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, s) + // TODO: tmpIdenPubOnChain ==> idenPubOnChain + tmpIdenPubOnChain, err := loadIdenPubOnChain(web3Url) + if err != nil { + panic(err) + } + return newIdentity(storePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, s) } // NewIdentityTestLoad is like NewIdentityLoad but uses a local implementation of the smart contract in idenPubOnChain @@ -113,7 +118,12 @@ func NewIdentityTestLoad(storePath, pass, web3Url string, checkTicketsPeriodMili if s == nil { s = &testEventHandler{} } - return newIdentityLoad(storePath, pass, idenPubOnChain, checkTicketsPeriodMilis, s) + // TODO: tmpIdenPubOnChain ==> idenPubOnChain + tmpIdenPubOnChain, err := loadIdenPubOnChain(web3Url) + if err != nil { + panic(err) + } + return newIdentityLoad(storePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, s) } func TestNewIdentity(t *testing.T) { diff --git a/go/iden3mobile/ticketshandlers_test.go b/go/iden3mobile/ticketshandlers_test.go index f39f2cc..9ae9411 100644 --- a/go/iden3mobile/ticketshandlers_test.go +++ b/go/iden3mobile/ticketshandlers_test.go @@ -59,15 +59,15 @@ func holderEventHandler(ev *Event) { func TestHolderHandlers(t *testing.T) { // Sync idenPubOnChain every 2 seconds - go func() { - for { - log.Info("idenPubOnChain.Sync()") - timeBlock.AddTime(10) - timeBlock.AddBlock(1) - idenPubOnChain.Sync() - time.Sleep(2 * time.Second) - } - }() + // go func() { + // for { + // log.Info("idenPubOnChain.Sync()") + // timeBlock.AddTime(10) + // timeBlock.AddBlock(1) + // idenPubOnChain.Sync() + // time.Sleep(2 * time.Second) + // } + // }() // // Start mockup server // server := mockupserver.Serve(t, &mockupserver.Conf{ @@ -91,7 +91,7 @@ func TestHolderHandlers(t *testing.T) { id1, err := NewIdentityTest(dir1, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) - id2, err := NewIdentityTest(dir2, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id2, err := NewIdentityTest(dir2, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Request claim t1, err := id1.RequestClaim(c.IssuerUrl, randomBase64String(80)) @@ -109,7 +109,7 @@ func TestHolderHandlers(t *testing.T) { id2, err = NewIdentityTestLoad(dir2, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, nil) require.Nil(t, err) // Wait for the events that will get triggered on issuer response - nAtempts := 10 + nAtempts := 1000 // TODO: go back to 10 atempts period := time.Duration(c.HolderTicketPeriod) * time.Millisecond eventFromId = 1 holderEventHandler(testGetEventWithTimeOut(id1.eventMan, 0, nAtempts, period)) @@ -117,19 +117,33 @@ func TestHolderHandlers(t *testing.T) { holderEventHandler(testGetEventWithTimeOut(id2.eventMan, 0, nAtempts, period)) // Prove claim i := 0 - for ; i < c.VerifierAttempts; i++ { - success1, err := id1.ProveClaim(c.VerifierUrl, id1ClaimID[:]) + // TODO: rm +100 + for ; i < c.VerifierAttempts+100; i++ { + // // Prove Claims + // success1, err := id1.ProveClaim(c.VerifierUrl, id1ClaimID[:]) + // if err != nil { + // log.Error("Error proving claim: ", err) + // } + // success2, err := id2.ProveClaim(c.VerifierUrl, id2ClaimID[:]) + // if err != nil { + // log.Error("Error proving claim: ", err) + // } + // Prove Claims with ZK + success1ZK, err := id1.ProveClaimZK(c.VerifierUrl, id1ClaimID[:]) if err != nil { log.Error("Error proving claim: ", err) } - success2, err := id2.ProveClaim(c.VerifierUrl, id2ClaimID[:]) + success2ZK, err := id2.ProveClaimZK(c.VerifierUrl, id2ClaimID[:]) if err != nil { log.Error("Error proving claim: ", err) } - if success1 && success2 { + // if success1 && success2 && success1ZK && success2ZK { + // break + // } + if success1ZK && success2ZK { break } - time.Sleep(time.Duration(c.VerifierRetryPeriod) * time.Second) + time.Sleep(time.Duration(c.VerifierRetryPeriod) * time.Second * 10) } require.NotEqual(t, c.VerifierAttempts, i) id1.Stop() From 8a7de1a5c647c14f61a4d15eb1bb5903f19d8826 Mon Sep 17 00:00:00 2001 From: a_bennassar Date: Thu, 21 May 2020 16:58:34 +0200 Subject: [PATCH 03/10] WIP --- go/iden3mobile/identity.go | 2 +- go/iden3mobile/ticketshandlers_test.go | 48 +++++++++----------------- 2 files changed, 17 insertions(+), 33 deletions(-) diff --git a/go/iden3mobile/identity.go b/go/iden3mobile/identity.go index 4b49a84..cfe3c9a 100644 --- a/go/iden3mobile/identity.go +++ b/go/iden3mobile/identity.go @@ -42,7 +42,7 @@ const ( eventsStorKey = "eventsKey" storageSubPath = "/idStore" keyStorageSubPath = "/idKeyStore" - smartContractAddress = "0x09561a45339910894705419af321c69a8832eab4" + smartContractAddress = "0x4cd72fcedf61937ffc8995d7c0839c976f3cc129" credExisPrefix = "credExis" folderStore = "store" folderKeyStore = "keystore" diff --git a/go/iden3mobile/ticketshandlers_test.go b/go/iden3mobile/ticketshandlers_test.go index 9ae9411..e9d3e30 100644 --- a/go/iden3mobile/ticketshandlers_test.go +++ b/go/iden3mobile/ticketshandlers_test.go @@ -115,42 +115,26 @@ func TestHolderHandlers(t *testing.T) { holderEventHandler(testGetEventWithTimeOut(id1.eventMan, 0, nAtempts, period)) eventFromId = 2 holderEventHandler(testGetEventWithTimeOut(id2.eventMan, 0, nAtempts, period)) - // Prove claim - i := 0 - // TODO: rm +100 - for ; i < c.VerifierAttempts+100; i++ { - // // Prove Claims - // success1, err := id1.ProveClaim(c.VerifierUrl, id1ClaimID[:]) - // if err != nil { - // log.Error("Error proving claim: ", err) - // } - // success2, err := id2.ProveClaim(c.VerifierUrl, id2ClaimID[:]) - // if err != nil { - // log.Error("Error proving claim: ", err) - // } - // Prove Claims with ZK - success1ZK, err := id1.ProveClaimZK(c.VerifierUrl, id1ClaimID[:]) - if err != nil { - log.Error("Error proving claim: ", err) - } - success2ZK, err := id2.ProveClaimZK(c.VerifierUrl, id2ClaimID[:]) - if err != nil { - log.Error("Error proving claim: ", err) - } - // if success1 && success2 && success1ZK && success2ZK { - // break - // } - if success1ZK && success2ZK { - break - } - time.Sleep(time.Duration(c.VerifierRetryPeriod) * time.Second * 10) - } - require.NotEqual(t, c.VerifierAttempts, i) + // Prove Claims + isSuccess, err := id1.ProveClaim(c.VerifierUrl, id1ClaimID[:]) + require.True(t, isSuccess) + require.NoError(t, err) + isSuccess, err = id2.ProveClaim(c.VerifierUrl, id2ClaimID[:]) + require.True(t, isSuccess) + require.NoError(t, err) + // Prove Claims with ZK + isSuccess, err = id1.ProveClaimZK(c.VerifierUrl, id1ClaimID[:]) + require.True(t, isSuccess) + require.NoError(t, err) + isSuccess, err = id2.ProveClaimZK(c.VerifierUrl, id2ClaimID[:]) + require.True(t, isSuccess) + require.NoError(t, err) + // Stop identities id1.Stop() id2.Stop() // err = server.Shutdown(context.Background()) - require.Nil(t, err) + // require.Nil(t, err) } func randomBase64String(l int) string { From 7e469289ea8ca3d7e5661bac5131967c78029f96 Mon Sep 17 00:00:00 2001 From: a_bennassar Date: Tue, 26 May 2020 16:59:31 +0200 Subject: [PATCH 04/10] Add ZK flow with demo servers instead of mockup --- android/gointegration/_build.gradle | 69 ++++++ android/gointegration/build.GHAgradle | 56 ----- android/gointegration/build.gradle | 47 ++-- .../gointegration/GomobileIntegrationTest.kt | 92 +++++--- .../Iden3mobileInstrumentedTest.kt | 206 +++++++++++------- .../src/main/AndroidManifest.xml | 3 + .../com/iden3/gointegration/MainActivity.kt | 5 +- go/go.mod | 10 +- go/go.sum | 22 ++ go/iden3mobile/identity.go | 114 ++++++---- go/iden3mobile/identity_test.go | 21 +- go/iden3mobile/ticketshandlers_test.go | 25 ++- go/mockupserver/mockupserver.go | 1 + 13 files changed, 396 insertions(+), 275 deletions(-) create mode 100644 android/gointegration/_build.gradle delete mode 100644 android/gointegration/build.GHAgradle diff --git a/android/gointegration/_build.gradle b/android/gointegration/_build.gradle new file mode 100644 index 0000000..3f0574d --- /dev/null +++ b/android/gointegration/_build.gradle @@ -0,0 +1,69 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +buildscript { + ext { + iden3mobile_version = 'v0.0.1-beta12' + } +} + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.2" + ndkVersion "20.0.5594570" + + defaultConfig { + applicationId "com.iden3.gointegration" + minSdkVersion 19 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + // Infura config + Properties infuraProperties = new Properties() + InputStream ins = new FileInputStream("infura.properties") + infuraProperties.load(ins) + ins.close() + buildConfigField("String", "INFURA_URL", infuraProperties['url']) + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/iden3/iden3-mobile") + credentials { + Properties githubProperties = new Properties() + InputStream ins = new FileInputStream("github.properties") + githubProperties.load(ins) + ins.close() + username = githubProperties['username'] + password = githubProperties['apikey'] + } + } + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.core:core-ktx:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + + androidTestImplementation 'androidx.test:core:1.2.0' + androidTestImplementation 'androidx.test:core-ktx:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + androidTestImplementation "com.iden3:iden3mobile:$iden3mobile_version" +} diff --git a/android/gointegration/build.GHAgradle b/android/gointegration/build.GHAgradle deleted file mode 100644 index cff7050..0000000 --- a/android/gointegration/build.GHAgradle +++ /dev/null @@ -1,56 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' - -android { - compileSdkVersion 29 - buildToolsVersion "29.0.2" - ndkVersion "20.0.5594570" - - defaultConfig { - applicationId "com.iden3.gointegration" - minSdkVersion 19 - targetSdkVersion 29 - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - // Infura config - Properties infuraProperties = new Properties() - InputStream ins = new FileInputStream("infura.properties") - infuraProperties.load(ins) - ins.close() - buildConfigField("String", "INFURA_URL", infuraProperties['url']) - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - - repositories { - flatDir{ - dirs 'src/libs' - } - } - -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - - androidTestImplementation 'androidx.test:core:1.2.0' - androidTestImplementation 'androidx.test:core-ktx:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - - api(name:'iden3mobile', ext:'aar') -} - diff --git a/android/gointegration/build.gradle b/android/gointegration/build.gradle index 3f0574d..cff7050 100644 --- a/android/gointegration/build.gradle +++ b/android/gointegration/build.gradle @@ -2,12 +2,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -buildscript { - ext { - iden3mobile_version = 'v0.0.1-beta12' - } -} - android { compileSdkVersion 29 buildToolsVersion "29.0.2" @@ -21,7 +15,6 @@ android { versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - // Infura config Properties infuraProperties = new Properties() InputStream ins = new FileInputStream("infura.properties") @@ -38,32 +31,26 @@ android { } repositories { - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/iden3/iden3-mobile") - credentials { - Properties githubProperties = new Properties() - InputStream ins = new FileInputStream("github.properties") - githubProperties.load(ins) - ins.close() - username = githubProperties['username'] - password = githubProperties['apikey'] - } + flatDir{ + dirs 'src/libs' } } + } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - - androidTestImplementation 'androidx.test:core:1.2.0' - androidTestImplementation 'androidx.test:core-ktx:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - androidTestImplementation "com.iden3:iden3mobile:$iden3mobile_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.core:core-ktx:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + + androidTestImplementation 'androidx.test:core:1.2.0' + androidTestImplementation 'androidx.test:core-ktx:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + api(name:'iden3mobile', ext:'aar') } + diff --git a/android/gointegration/src/androidTest/java/com/iden3/gointegration/GomobileIntegrationTest.kt b/android/gointegration/src/androidTest/java/com/iden3/gointegration/GomobileIntegrationTest.kt index 077db95..15db846 100644 --- a/android/gointegration/src/androidTest/java/com/iden3/gointegration/GomobileIntegrationTest.kt +++ b/android/gointegration/src/androidTest/java/com/iden3/gointegration/GomobileIntegrationTest.kt @@ -9,8 +9,8 @@ import org.junit.Assert.assertNotEquals import org.junit.Test import org.junit.runner.RunWith import java.io.File -import java.lang.Exception import java.time.Instant +import java.util.* /** * Instrumented test, which will execute on an Android device. @@ -23,14 +23,15 @@ class GomobileIntegrationTest { fun fullFlow() { // Test config val nIdentities = 2 - val nClaimsPerId = 5 + val nClaimsPerId = 2 val web3Url = BuildConfig.INFURA_URL - val issuerUrl = "http://167.172.104.160:6100/api/unstable" - val verifierUrl = "http://167.172.104.160:6200/api/unstable" + val issuerUrl = "http://188.166.70.93:6100/api/unstable/" + val verifierUrl = "http://188.166.70.93:6200/api/unstable/" // Create a new directory for each identity val appContext = InstrumentationRegistry.getInstrumentation().targetContext val storePath = appContext.filesDir.absolutePath + val sharedStorePath = appContext.filesDir.absolutePath + "/shared" for (i in 0 until nIdentities){ // Remove directory in case last test did't finish File("$storePath/$i").deleteRecursively() @@ -45,6 +46,7 @@ class GomobileIntegrationTest { try { Iden3mobile.newIdentity( "$storePath/$i", + sharedStorePath, "password", web3Url, 1000, @@ -69,11 +71,14 @@ class GomobileIntegrationTest { for (i in 0 until nClaimsPerId){ var idCount = 0 for (id in ids){ - id?.requestClaimWithCb(issuerUrl, "$idCount/$i/${Instant.now()}") { ticket, e -> + Log.i("fullFlow","REQUESTING CLAIM") + val data = random() + Log.i("jeje",data) + id?.requestClaimWithCb(issuerUrl, data) { ticket, e -> + Log.i("fullFlow","REQUEST CLAIM TICKET RECEIVED: ${ticket?.id}. $ticketCounter TICKETS RECEIVED SO FAR}") assertNotEquals(null, ticket) assertEquals(null, e) ticketCounter++ - Log.i("fullFlow","REQUEST CLAIM TICKET RECEIVED: ${ticket?.id}. $ticketCounter TICKETS RECEIVED SO FAR}") } idCount++ } @@ -85,7 +90,7 @@ class GomobileIntegrationTest { } // Restart identities - ids = restartIdentities(ids, storePath, web3Url, fun (event: Event) { + ids = restartIdentities(ids, storePath, sharedStorePath, web3Url, fun (event: Event) { eventCounter++ Log.i("fullFlow","EVENT RECEIVED: ${event.ticketId}. $eventCounter EVENTS RECEIVED SO FAR") assertEquals(null, event.err) @@ -101,36 +106,40 @@ class GomobileIntegrationTest { assertEquals(nIdentities*nClaimsPerId, countClaims(ids)) // 3. Prove claims - // Since the claims have been issued instants ago, they may not be on chain yet - // so it's normal to receive error in the upcoming seconds var provedClaims = 0 - var attempts = 10 - while (provedClaims < nIdentities*nClaimsPerId && attempts >= 0){ - provedClaims = 0 - for (id in ids){ - id?.getClaimDB()?.iterateClaimsJSON(object: ClaimDBIterFner{ - override fun fn(key: String, claim: String): Boolean{ - id.proveClaimWithCb(verifierUrl, key, object: CallbackProveClaim { - override fun fn(success: Boolean, e: Exception?) { - Log.i("fullFlow", "Verify claim: $key. Success? $success. Error? $e") - if(e == null){ - assertEquals(true, success) - provedClaims++ - } - } - }) - return true - } - }) - } - attempts-- - Log.i("fullFlow","WAITING FOR CLAIMS TO BE PROVED.") + for (id in ids){ + id?.claimDB?.iterateClaimsJSON(object: ClaimDBIterFner{ + override fun fn(key: String, claim: String): Boolean{ + // Prove claim + id.proveClaimWithCb(verifierUrl, key, object: CallbackProveClaim { + override fun fn(success: Boolean, e: Exception?) { + Log.i("fullFlow", "Verify claim: $key. Success? $success. Error? $e") + assertEquals(null, e) + assertEquals(true, success) + provedClaims++ + } + }) + // Prove claim with ZK (Zero Knowledge) + id.proveClaimZKWithCb(verifierUrl, key, object: CallbackProveClaim { + override fun fn(success: Boolean, e: Exception?) { + Log.i("fullFlow", "Verify claim ZK: $key. Success? $success. Error? $e") + assertEquals(null, e) + assertEquals(true, success) + provedClaims++ + } + }) + return true + } + }) + } + // Wait untilall claims have been proved with and without ZK + while (provedClaims < nIdentities*nClaimsPerId*2){ Thread.sleep(2_000) } - assertEquals(nClaimsPerId*nIdentities, provedClaims) + assertEquals(nClaimsPerId*nIdentities*2, provedClaims) // Restart identities - ids = restartIdentities(ids, storePath, web3Url, fun (event: Event) { + ids = restartIdentities(ids, storePath, sharedStorePath, web3Url, fun (event: Event) { eventCounter++ Log.i("fullFlow","UNEXPECTED EVENT RECEIVED: ${event.ticketId}.") assertEquals(null, event) @@ -145,13 +154,14 @@ class GomobileIntegrationTest { Log.i("fullFlow","REQUESTING CLAIMS AND CANCELING THEM.") ticketCounter = 0 for (id in ids){ - id?.requestClaimWithCb(issuerUrl, "${Instant.now()}", object: CallbackRequestClaim{ + val data = random() + id?.requestClaimWithCb(issuerUrl, data, object: CallbackRequestClaim{ override fun fn(ticket: Ticket?, e: Exception?) { assertNotEquals(null, ticket) assertEquals(null, e) Log.i("fullFlow","REQUEST CLAIM TICKET RECEIVED.") // Cancel ticket - id?.tickets.cancelTicket(ticket?.id) + id.tickets.cancelTicket(ticket?.id) ticketCounter++ } }) @@ -195,7 +205,7 @@ class GomobileIntegrationTest { Log.i("fullFlow","TEST COMPLETED :)") } - fun restartIdentities(ids: List, storePath: String, web3Url: String, fn: (e:Event)->Unit): List{ + fun restartIdentities(ids: List, storePath: String, sharedStorePath: String, web3Url: String, fn: (e:Event)->Unit): List{ Log.i("fullFlow","RESTARTING IDENTITIES") for (id in ids){ id?.stop() @@ -204,6 +214,7 @@ class GomobileIntegrationTest { try { Iden3mobile.newIdentityLoad( "$storePath/$i", + sharedStorePath, "password", web3Url, 1000, @@ -232,4 +243,15 @@ class GomobileIntegrationTest { } return claimCounter } + + fun random(): String? { + val generator = Random() + val randomStringBuilder = StringBuilder() + var tempChar: Char + for (i in 0 until 16) { + tempChar = ((generator.nextInt(10) + 48).toChar()) + randomStringBuilder.append(tempChar) + } + return randomStringBuilder.toString() + } } diff --git a/android/gointegration/src/androidTest/java/com/iden3/gointegration/Iden3mobileInstrumentedTest.kt b/android/gointegration/src/androidTest/java/com/iden3/gointegration/Iden3mobileInstrumentedTest.kt index 9aa8bfb..946178a 100644 --- a/android/gointegration/src/androidTest/java/com/iden3/gointegration/Iden3mobileInstrumentedTest.kt +++ b/android/gointegration/src/androidTest/java/com/iden3/gointegration/Iden3mobileInstrumentedTest.kt @@ -4,7 +4,8 @@ import android.content.Context import android.util.Log import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry -import iden3mobile.* +import iden3mobile.Iden3mobile +import iden3mobile.Identity import junit.framework.TestCase.assertEquals import org.hamcrest.core.StringContains import org.junit.Assert @@ -16,6 +17,7 @@ import org.junit.rules.ExpectedException import org.junit.runner.RunWith import java.io.File import java.time.Instant +import java.util.* /** @@ -28,10 +30,11 @@ import java.time.Instant class Iden3mobileInstrumentedTest { private val web3Url = BuildConfig.INFURA_URL - private val issuerUrl = "http://167.172.104.160:6100/api/unstable" - private val verifierUrl = "http://167.172.104.160:6200/api/unstable" + private val issuerUrl = "http://192.168.200.181:6100/api/unstable/" + private val verifierUrl = "http://192.168.200.181:6200/api/unstable/" private lateinit var instrumentationCtx: Context private lateinit var storePath: String + private lateinit var sharedStorePath: String @Rule @JvmField @@ -41,6 +44,8 @@ class Iden3mobileInstrumentedTest { fun setup() { instrumentationCtx = InstrumentationRegistry.getInstrumentation().targetContext storePath = instrumentationCtx.filesDir.absolutePath + sharedStorePath = instrumentationCtx.filesDir.absolutePath + "/shared" + // getSystemService(instrumentationCtx.DOWNLOAD_SERVICE) } @Test @@ -52,6 +57,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, @@ -70,6 +76,7 @@ class Iden3mobileInstrumentedTest { } Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, @@ -83,6 +90,7 @@ class Iden3mobileInstrumentedTest { expectedException.expectMessage(StringContains("no such file or directory")) Iden3mobile.newIdentity( null, + sharedStorePath, "password", web3Url, 1000, @@ -101,6 +109,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, null, web3Url, 1000, @@ -119,6 +128,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", null, 1000, @@ -137,6 +147,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 0, @@ -155,6 +166,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, -1000, @@ -171,6 +183,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() val identity = Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, @@ -181,6 +194,7 @@ class Iden3mobileInstrumentedTest { Iden3mobile.newIdentityLoad( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000 @@ -197,6 +211,7 @@ class Iden3mobileInstrumentedTest { } Iden3mobile.newIdentityLoad( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000 @@ -214,6 +229,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, @@ -222,6 +238,7 @@ class Iden3mobileInstrumentedTest { Iden3mobile.newIdentityLoad( "$storePath/alias", + sharedStorePath, "wrongPassword", web3Url, 1000 @@ -231,7 +248,7 @@ class Iden3mobileInstrumentedTest { @Test fun testLoadIdentityErrorWrongPassword() { expectedException.expect(Exception::class.java) - expectedException.expectMessage(StringContains("Error unlocking babyjub key from keystore: Invalid encrypted data")) + expectedException.expectMessage(StringContains("Error unlocking babyjub key from keystore: invalid encrypted data")) val file = File("$storePath/alias") if (file.exists()) { file.deleteRecursively() @@ -239,6 +256,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() val identity = Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, @@ -249,6 +267,7 @@ class Iden3mobileInstrumentedTest { Iden3mobile.newIdentityLoad( "$storePath/alias", + sharedStorePath, "wrongPassword", web3Url, 1000 @@ -264,18 +283,21 @@ class Iden3mobileInstrumentedTest { file.mkdirs() val identity = Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, null ) { event -> print(event) } - - val ticket = identity.requestClaim(issuerUrl, "${Instant.now()}") + val data = random() + val ticket = identity.requestClaim(issuerUrl, data) Log.i("testRequestClaimSuccess","Ticket: $ticket") Assert.assertNotEquals(null, ticket) identity.stop() } + /** + * This test is broken, it will pass even when ticket is null or e is not null @Test fun testRequestClaimWithCallbackSuccess() { val file = File("$storePath/alias") @@ -292,7 +314,8 @@ class Iden3mobileInstrumentedTest { ) { event -> print(event) } var isFinished = false - identity.requestClaimWithCb(issuerUrl, "${Instant.now()}") { ticket, e -> + val data = random() + identity.requestClaimWithCb(issuerUrl, data) { ticket, e -> isFinished = true Log.i("testRequestClaimWithCallbackSuccess","Ticket: $ticket") assertNotEquals(null, ticket) @@ -306,7 +329,12 @@ class Iden3mobileInstrumentedTest { Thread.sleep(100) } } +**/ + /** + * This test is broken: + * if requestClaimWithCb has error the test will run forever + * proveClaimWithCb is called with ticket.id instead of claim.id @Test fun testProveClaimSuccess() { val file = File("$storePath/alias") @@ -315,11 +343,11 @@ class Iden3mobileInstrumentedTest { } file.mkdirs() val identity = Iden3mobile.newIdentity( - "$storePath/alias", - "password", - web3Url, - 1000, - null + "$storePath/alias", + "password", + web3Url, + 1000, + null ) { event -> print(event) } var isFinished = false @@ -342,6 +370,7 @@ class Iden3mobileInstrumentedTest { Thread.sleep(100) } } +**/ @Test fun testProveClaimWithCallbackSuccess() { @@ -353,6 +382,7 @@ class Iden3mobileInstrumentedTest { file.mkdirs() val identity = Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, @@ -365,31 +395,25 @@ class Iden3mobileInstrumentedTest { } var isFinished = false - identity.requestClaimWithCb(issuerUrl, "${Instant.now()}") { ticket, e -> + var errMsg = "" + val data = random() + identity.requestClaimWithCb(issuerUrl, data) { ticket, e -> Log.i("testProveClaimWithCallbackSuccess","Ticket: $ticket") - assertNotEquals(null, ticket) - assertEquals(null, e) + if(ticket == null || e != null){ + errMsg ="Wrong request response: ${e.message}" + isFinished = true + return@requestClaimWithCb + } while (countClaims(identity) == 0 && !eventReceived) { Log.i("testProveClaimWithCallbackSuccess","Waiting for claim to be available in the database") Thread.sleep(1000) } - var identityOnChain = false - identity.claimDB?.iterateClaimsJSON { key, claim -> - while (!identityOnChain) { - identity.proveClaimWithCb(verifierUrl, key) { success, exception -> - Log.i( - "testProveClaimWithCallbackSuccess", - "Proving Claim success: $success exception: $exception" - ) - identityOnChain = !(exception != null && exception.message!!.contains("Identity not found on chain")) - if (identityOnChain) { - isFinished = true - Assert.assertEquals(true, success) - Assert.assertEquals(null, exception) - identity.stop() - } + identity.claimDB?.iterateClaimsJSON { key, _ -> + identity.proveClaimWithCb(verifierUrl, key) { success, exception -> + if(!success || exception != null){ + errMsg ="Error proving: ${exception.message}" } - Thread.sleep(2000) + isFinished = true } true } @@ -400,49 +424,70 @@ class Iden3mobileInstrumentedTest { Log.i("testProveClaimWithCallbackSuccess","Waiting for request claim ticket") Thread.sleep(1000) } + identity.stop() + Assert.assertEquals("", errMsg) } @Test - fun testProveClaimWithCallbackErrorKeyNotFound() { - expectedException.expect(Exception::class.java) - expectedException.expectMessage(StringContains("key not found")) + fun testProveClaimZKWithCallbackSuccess() { + var eventReceived = false val file = File("$storePath/alias") if (file.exists()) { file.deleteRecursively() } file.mkdirs() val identity = Iden3mobile.newIdentity( - "$storePath/alias", - "password", - web3Url, - 1000, - null - ) { event -> print(event) } + "$storePath/alias", + sharedStorePath, + "password", + web3Url, + 1000, + null + ) { event -> + eventReceived = true + Log.i("fullFlow","Event Received: ${event.ticketId}.") + assertEquals(null, event.err) + print(event) + } - var exp : Exception? = null var isFinished = false - identity.proveClaimWithCb(verifierUrl, "wrong_key") { success, exception -> - Log.i("testProveClaimWithCallbackErrorKeyNotFound", "Proving Clam success: $success exception: $exception") - assertEquals(false, success) - assertNotEquals(null, exception) - identity.stop() - exp = exception - isFinished = true + var errMsg = "" + val data = random() + identity.requestClaimWithCb(issuerUrl, data) { ticket, e -> + Log.i("testProveClaimZKWithCallbackSuccess","Ticket: $ticket") + if(ticket == null || e != null){ + errMsg ="Wrong request response: ${e.message}" + isFinished = true + return@requestClaimWithCb + } + while (countClaims(identity) == 0 && !eventReceived) { + Log.i("testProveClaimZKWithCallbackSuccess","Waiting for claim to be available in the database") + Thread.sleep(1000) + } + identity.claimDB?.iterateClaimsJSON { key, _ -> + identity.proveClaimZKWithCb(verifierUrl, key) { success, exception -> + if(!success || exception != null){ + errMsg ="Error proving: ${exception.message}" + } + isFinished = true + } + true + } } // Wait for callback while (!isFinished){ - Log.i("testProveClaimWithCallbackErrorKeyNotFound","Waiting for proving claim") - Thread.sleep(100) + Log.i("testProveClaimZKWithCallbackSuccess","Waiting for request claim ticket") + Thread.sleep(1000) } - throw exp!! + identity.stop() + Assert.assertEquals("", errMsg) } @Test - fun testProveClaimWithCallbackErrorIdentityNotFoundOnChain() { + fun testProveClaimWithCallbackErrorKeyNotFound() { expectedException.expect(Exception::class.java) - expectedException.expectMessage(StringContains("server: VerifyCredentialValidity(): Identity not found on chain or the queried block number is not yet on chain")) - var eventReceived = false + expectedException.expectMessage(StringContains("key not found")) val file = File("$storePath/alias") if (file.exists()) { file.deleteRecursively() @@ -450,54 +495,49 @@ class Iden3mobileInstrumentedTest { file.mkdirs() val identity = Iden3mobile.newIdentity( "$storePath/alias", + sharedStorePath, "password", web3Url, 1000, null - ) { event -> - eventReceived = true - Log.i("fullFlow","Event Received: ${event.ticketId}.") - assertEquals(null, event.err) - print(event) - } + ) { event -> print(event) } + var exp : Exception? = null var isFinished = false - identity.requestClaimWithCb(issuerUrl, "${Instant.now()}") { ticket, e -> - Log.i("testProveClaimWithCallbackSuccess","Ticket: $ticket") - assertNotEquals(null, ticket) - assertEquals(null, e) - while (countClaims(identity) == 0 && !eventReceived) { - Log.i("testProveClaimWithCallbackSuccess","Waiting for claim to be available in the database") - Thread.sleep(1000) - } - identity.claimDB?.iterateClaimsJSON { key, claim -> - identity.proveClaimWithCb(verifierUrl, key) { success, exception -> - Log.i("testProveClaimWithCallbackSuccess", "Proving Claim success: $success exception: $exception") - assertEquals(false, success) - assertNotEquals(null, exception) - identity.stop() - exp = exception - isFinished = true - } - true - } - + identity.proveClaimWithCb(verifierUrl, "wrong_key") { success, exception -> + Log.i("testProveClaimWithCallbackErrorKeyNotFound", "Proving Clam success: $success exception: $exception") + assertEquals(false, success) + assertNotEquals(null, exception) + identity.stop() + exp = exception + isFinished = true } // Wait for callback while (!isFinished){ - Log.i("testProveClaimWithCallbackSuccess","Waiting for request claim ticket") - Thread.sleep(1000) + Log.i("testProveClaimWithCallbackErrorKeyNotFound","Waiting for callbacks") + Thread.sleep(100) } throw exp!! } private fun countClaims(identity: Identity): Int { var claimCounter = 0 - identity.claimDB?.iterateClaimsJSON { key, claim -> + identity.claimDB?.iterateClaimsJSON { _, _ -> claimCounter++ true } return claimCounter } + + fun random(): String? { + val generator = Random() + val randomStringBuilder = StringBuilder() + var tempChar: Char + for (i in 0 until 16) { + tempChar = ((generator.nextInt(10) + 48).toChar()) + randomStringBuilder.append(tempChar) + } + return randomStringBuilder.toString() + } } diff --git a/android/gointegration/src/main/AndroidManifest.xml b/android/gointegration/src/main/AndroidManifest.xml index d96e907..29e97f7 100644 --- a/android/gointegration/src/main/AndroidManifest.xml +++ b/android/gointegration/src/main/AndroidManifest.xml @@ -1,9 +1,12 @@ + + + diff --git a/android/gointegration/src/main/java/com/iden3/gointegration/MainActivity.kt b/android/gointegration/src/main/java/com/iden3/gointegration/MainActivity.kt index 7081cae..10e30b2 100644 --- a/android/gointegration/src/main/java/com/iden3/gointegration/MainActivity.kt +++ b/android/gointegration/src/main/java/com/iden3/gointegration/MainActivity.kt @@ -1,7 +1,10 @@ package com.iden3.gointegration -import androidx.appcompat.app.AppCompatActivity +import android.app.DownloadManager +import android.content.Context +import android.net.Uri import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { diff --git a/go/go.mod b/go/go.mod index 09bb3f1..2b76705 100644 --- a/go/go.mod +++ b/go/go.mod @@ -16,11 +16,11 @@ require ( github.com/google/uuid v1.1.1 github.com/gorilla/websocket v1.4.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/iden3/go-circom-prover-verifier v0.0.0-20200515100033-bedd64cc7062 - github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463 - github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f - github.com/iden3/go-iden3-servers v0.0.2-0.20200518153723-bac79e820d3b - github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3 + github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169 + github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585 + github.com/iden3/go-iden3-crypto v0.0.5-0.20200525100545-2c471ab54594 + github.com/iden3/go-iden3-servers v0.0.2-0.20200525092853-167fda8ae7d9 + github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2 github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect diff --git a/go/go.sum b/go/go.sum index 11d2a9e..f204c87 100644 --- a/go/go.sum +++ b/go/go.sum @@ -216,18 +216,38 @@ github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3 github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= github.com/iden3/go-circom-prover-verifier v0.0.0-20200515100033-bedd64cc7062 h1:ubD/0wj/izgCFI3sqRXtpcjvpOGGC4egotEEZn1kqUI= github.com/iden3/go-circom-prover-verifier v0.0.0-20200515100033-bedd64cc7062/go.mod h1:ZGStP/GSsKbIaLEowo7JmqnWgneFAapA4NrZakHcUk4= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200521092553-386758370ebe h1:3kgpBgpS69aYmEjde2T51grJCCneTOaji3nOuJdVwzI= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200521092553-386758370ebe/go.mod h1:ZGStP/GSsKbIaLEowo7JmqnWgneFAapA4NrZakHcUk4= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200521141907-e652f3475367 h1:0NqWxBEH27aBVQukQNz2wtJgzGGz+U/znZSka4EdoHs= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200521141907-e652f3475367/go.mod h1:ZGStP/GSsKbIaLEowo7JmqnWgneFAapA4NrZakHcUk4= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169 h1:KRWJ4cX/UllnHTH0c7BLtZu+CzANADoi7bxtIuvhzZ4= +github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169/go.mod h1:ZGStP/GSsKbIaLEowo7JmqnWgneFAapA4NrZakHcUk4= github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429 h1:UTGpt2GCsNNC2sSYS6iBUDnR75HiCkogHdVSI2JyUsk= github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429/go.mod h1:c3FEU+iwM55k0lvzpwkCk5ljmv+gV2nnkCVHiuUDxFo= github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463 h1:faZIi4aAYXgsSrF9uevL+eI1JnZ1vE0aFu3AU8Vuedk= github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463/go.mod h1:mMnPlXVspF49lxOb7/fqp7VCfD/YYEBvAjnUt+dkM8s= +github.com/iden3/go-iden3-core v0.0.8-0.20200521103313-a008b6977d6f h1:/xG3cR2aCu0OSPRoUP3eYT5bcCa+xmX2bvCfRpv+H/8= +github.com/iden3/go-iden3-core v0.0.8-0.20200521103313-a008b6977d6f/go.mod h1:mMnPlXVspF49lxOb7/fqp7VCfD/YYEBvAjnUt+dkM8s= +github.com/iden3/go-iden3-core v0.0.8-0.20200521160014-a91c08aefb7f h1:LCc8fyakA8xYHprtG55sYpV5vyX1G0c8rwAoEfuWsnc= +github.com/iden3/go-iden3-core v0.0.8-0.20200521160014-a91c08aefb7f/go.mod h1:ut0/KIWjRPMrE4ZLsUoBum5O9Vx3J+ZV58E+TWYjcaI= +github.com/iden3/go-iden3-core v0.0.8-0.20200522154712-780c4e804a1a h1:rs7dwrs8AzHlxjdMo+IWAX9FW9FMiBzKy0nV6lt1gL0= +github.com/iden3/go-iden3-core v0.0.8-0.20200522154712-780c4e804a1a/go.mod h1:gmpIFRakc/EJg1anHL3h0VK2EHk0Z/+1jN9m9PzZ51Y= +github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585 h1:+jHFxk9mtgIiX0kxoGGqFQ7iM8ykAszoGqknaUiwtKk= +github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585/go.mod h1:R0kslW82OPgUVap2cGi87yIDCCwB349CHUKsmI4T+PA= github.com/iden3/go-iden3-crypto v0.0.5-0.20200421133134-14c3144613d4/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f h1:geZ9S70cAAo/Dtu9LvUKjWs0rBsDZjWdYzSCkNc+gVE= github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= +github.com/iden3/go-iden3-crypto v0.0.5-0.20200525100545-2c471ab54594 h1:QMZqlVn1U+UNnIdeV3VEtE+cnPyWGHNK5ckKcxMhyj4= +github.com/iden3/go-iden3-crypto v0.0.5-0.20200525100545-2c471ab54594/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= github.com/iden3/go-iden3-servers v0.0.2-0.20200515143026-71f0da093a96/go.mod h1:2m/BAy6OUeA/TV39Prpa4yJh3pOJsnrvHGiE97vxnAI= github.com/iden3/go-iden3-servers v0.0.2-0.20200518153723-bac79e820d3b h1:oXi0X3NMxq9JUVJku4/C1tiCqixdG8lCRH5QEoJgQPU= github.com/iden3/go-iden3-servers v0.0.2-0.20200518153723-bac79e820d3b/go.mod h1:2m/BAy6OUeA/TV39Prpa4yJh3pOJsnrvHGiE97vxnAI= +github.com/iden3/go-iden3-servers v0.0.2-0.20200525092853-167fda8ae7d9 h1:6tbgF4aBHkoB9uA1qP8WoxjQL432cJMIdUGQzDYguBg= +github.com/iden3/go-iden3-servers v0.0.2-0.20200525092853-167fda8ae7d9/go.mod h1:zrcnItQUjZ9Du8FuyoptQ6M3Vm81H4DWfwjCNzmJrqU= github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3 h1:LCGOrwIKMrKxxYA4AawSZiJa5hqAqcABjfFF7+jfV/o= github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3/go.mod h1:h3c3VvlEj8cNqzsRWD0nAgCfBf4IhDXB6+no4emmS44= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2 h1:AR7fJjK65NS54kEVxYx0Knd9YfmCgs80emvUGcfefqg= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2/go.mod h1:vSe8kUyBVA4VqLEvprWEaZGpcgZgFoyncdoHO5snwxc= github.com/iden3/go-public-key-encryption v0.0.0-20200129111956-c21e08c0ca6d/go.mod h1:ywEbbcgoETcOzZQ7YedY67DfG8tPuHbH89yn0zhjjeU= github.com/iden3/go-wasm3 v0.0.0-20200407092348-656263e6984f/go.mod h1:j+TcAB94Dfrjlu5kJt83h2OqAU+oyNUTwNZnQyII1sI= github.com/iden3/go-wasm3 v0.0.0-20200514131940-7bb78777b8ec h1:uQR2IqYOH/y0f4NNdYnw5iw6CCVbWiuA2iVd0pdyXWU= @@ -490,6 +510,7 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20200329125638-4c31acba0007 h1:JxsyO7zPDWn1rBZW8FV5RFwCKqYeXnyaS/VQPLpXu6I= golang.org/x/mobile v0.0.0-20200329125638-4c31acba0007/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= @@ -563,6 +584,7 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190912185636-87d9f09c5d89/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69 h1:yBHHx+XZqXJBm6Exke3N7V9gnlsyXxoCPEb1yVenjfk= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/go/iden3mobile/identity.go b/go/iden3mobile/identity.go index cfe3c9a..cd41af4 100644 --- a/go/iden3mobile/identity.go +++ b/go/iden3mobile/identity.go @@ -27,14 +27,14 @@ import ( ) type Identity struct { - id *holder.Holder - baseStorePath string - storage db.Storage - keyStore *babykeystore.KeyStore - ClaimDB *ClaimDB - Tickets *Tickets - stopTickets chan bool - eventMan *EventManager + id *holder.Holder + sharedStorePath string + storage db.Storage + keyStore *babykeystore.KeyStore + ClaimDB *ClaimDB + Tickets *Tickets + stopTickets chan bool + eventMan *EventManager } const ( @@ -67,15 +67,15 @@ func isEmpty(path string) (bool, error) { // this funciton is mapped as a constructor in Java. // NOTE: The storePath must be unique per Identity. // NOTE: Right now the extraGenesisClaims is useless. -func NewIdentity(storePath, pass, web3Url string, checkTicketsPeriodMilis int, extraGenesisClaims *BytesArray, eventHandler Sender) (*Identity, error) { +func NewIdentity(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, extraGenesisClaims *BytesArray, eventHandler Sender) (*Identity, error) { idenPubOnChain, err := loadIdenPubOnChain(web3Url) if err != nil { return nil, err } - return newIdentity(storePath, pass, idenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, eventHandler) + return newIdentity(storePath, sharedStorePath, pass, idenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, eventHandler) } -func newIdentity(storePath, pass string, idenPubOnChain idenpubonchain.IdenPubOnChainer, +func newIdentity(storePath, sharedStorePath, pass string, idenPubOnChain idenpubonchain.IdenPubOnChainer, checkTicketsPeriodMilis int, extraGenesisClaims *BytesArray, eventHandler Sender) (*Identity, error) { // Check that storePath points to an empty dir if dirIsEmpty, err := isEmpty(storePath); !dirIsEmpty || err != nil { @@ -84,8 +84,8 @@ func newIdentity(storePath, pass string, idenPubOnChain idenpubonchain.IdenPubOn } return nil, err } - ZKPath := path.Join(storePath, folderZKArtifacts) - if err := os.Mkdir(ZKPath, 0700); err != nil { + ZKPath := path.Join(sharedStorePath, folderZKArtifacts) + if err := os.MkdirAll(ZKPath, 0700); err != nil { return nil, err } storagePath := path.Join(storePath, folderStore) @@ -157,20 +157,20 @@ func newIdentity(storePath, pass string, idenPubOnChain idenpubonchain.IdenPubOn } storage.Close() resourcesAreClosed = true - return newIdentityLoad(storePath, pass, idenPubOnChain, checkTicketsPeriodMilis, eventHandler) + return newIdentityLoad(storePath, sharedStorePath, pass, idenPubOnChain, checkTicketsPeriodMilis, eventHandler) } // NewIdentityLoad loads an already created identity // this funciton is mapped as a constructor in Java -func NewIdentityLoad(storePath, pass, web3Url string, checkTicketsPeriodMilis int, eventHandler Sender) (*Identity, error) { +func NewIdentityLoad(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, eventHandler Sender) (*Identity, error) { idenPubOnChain, err := loadIdenPubOnChain(web3Url) if err != nil { return nil, err } - return newIdentityLoad(storePath, pass, idenPubOnChain, checkTicketsPeriodMilis, eventHandler) + return newIdentityLoad(storePath, sharedStorePath, pass, idenPubOnChain, checkTicketsPeriodMilis, eventHandler) } -func newIdentityLoad(storePath, pass string, idenPubOnChain idenpubonchain.IdenPubOnChainer, checkTicketsPeriodMilis int, eventHandler Sender) (*Identity, error) { +func newIdentityLoad(storePath, sharedStorePath, pass string, idenPubOnChain idenpubonchain.IdenPubOnChainer, checkTicketsPeriodMilis int, eventHandler Sender) (*Identity, error) { // TODO: figure out how to diferentiate the two constructors from Java: https://github.com/iden3/iden3-mobile/issues/17#issuecomment-587374644 storage, err := loadStorage(path.Join(storePath, folderStore)) if err != nil { @@ -207,14 +207,14 @@ func newIdentityLoad(storePath, pass string, idenPubOnChain idenpubonchain.IdenP // Init Identity iden := &Identity{ - id: holdr, - storage: storage, - baseStorePath: storePath, - keyStore: keyStore, - Tickets: NewTickets(storage.WithPrefix([]byte(ticketPrefix))), - stopTickets: make(chan bool), - eventMan: em, - ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExisPrefix))), + id: holdr, + storage: storage, + sharedStorePath: sharedStorePath, + keyStore: keyStore, + Tickets: NewTickets(storage.WithPrefix([]byte(ticketPrefix))), + stopTickets: make(chan bool), + eventMan: em, + ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExisPrefix))), } go iden.Tickets.CheckPending(iden, eventQueue, time.Duration(checkTicketsPeriodMilis)*time.Millisecond, iden.stopTickets) return iden, nil @@ -233,6 +233,10 @@ func (i *Identity) Stop() { // This function will eventually trigger an event, // the returned ticket can be used to reference the event func (i *Identity) RequestClaim(baseUrl, data string) (*Ticket, error) { + // Warning: This only applies to the current used claim! + if len(data) > 16 { + return nil, errors.New("The data string cannot be longer than 16 chars") + } id := uuid.New().String() t := &Ticket{ Id: id, @@ -244,6 +248,7 @@ func (i *Identity) RequestClaim(baseUrl, data string) (*Ticket, error) { if err := httpClient.DoRequest(httpClient.NewRequest().Path( "claim/request").Post("").BodyJSON(&issuerMsg.ReqClaimRequest{ Value: data, + Index: data, HolderID: i.id.ID(), }), &res); err != nil { return nil, err @@ -265,8 +270,8 @@ func (i *Identity) RequestClaimWithCb(baseUrl, data string, c CallbackRequestCla go func() { c.Fn(i.RequestClaim(baseUrl, data)) }() } -// ProveClaim sends a credentialValidity build from the given credentialExistance to a verifier -// the callback is used to check if the verifier has accepted the credential as valid +// ProveClaim sends a credentialValidity build from the given credentialExistance to a verifier. +// The response should be true if the verified accepted the prove as valid func (i *Identity) ProveClaim(baseUrl string, credID string) (bool, error) { // Build credential validity credVal, err := i.getCredentialValidity(credID) @@ -286,9 +291,31 @@ func (i *Identity) ProveClaim(baseUrl string, credID string) (bool, error) { return true, nil } +func (i *Identity) getCredentialValidity(credID string) (*proof.CredentialValidity, error) { + // Get credential existance + credExis, err := i.ClaimDB.GetCredExist(credID) + if err != nil { + return nil, err + } + // Build credential validity + return i.id.HolderGetCredentialValidity(credExis) +} + +// CallbackProveClaim is a interface used to get an asynchronous response from +// ProveClaimWithCb and ProveClaimZKWithCb +type CallbackProveClaim interface { + Fn(bool, error) +} + +// ProveClaimWithCb sends a credentialValidity build from the given credentialExistance to a verifier. +// The callback is used to check if the verifier has accepted the credential as valid in an async maner +func (i *Identity) ProveClaimWithCb(baseUrl string, credID string, c CallbackProveClaim) { + go func() { c.Fn(i.ProveClaim(baseUrl, credID)) }() +} + // ProveClaimZK sends a credentialValidity build from the given credentialExistance to a verifier. // This method will generate a zero knowledge proof so the verifier can't see the content of the claim. -// The callback is used to check if the verifier has accepted the credential as valid +// The response should be true if the verified accepted the prove as valid. func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { // Get credential existance credExis, err := i.ClaimDB.GetCredExist(credID) @@ -299,6 +326,7 @@ func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { // Build credential ownership zk proof // WARNING: this is a hardcoded proof generation for a specific claim/circuit. // In the future we will add some mechanism that can deduce how to generate an arbitrary proof. + proofName := "claimDemo" addInputs := func(claim *merkletree.Entry) func(inputs map[string]interface{}) error { return func(inputs map[string]interface{}) error { var metadata claims.Metadata @@ -324,6 +352,10 @@ func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { return nil } } + ZKPath := path.Join(i.sharedStorePath, folderZKArtifacts, proofName) + if err := os.MkdirAll(ZKPath, 0700); err != nil { + return false, err + } zkProofCredOut, err := i.id.HolderGenZkProofCredential( credExis, addInputs(credExis.Claim), @@ -331,9 +363,10 @@ func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { 16, zkutils.NewZkFiles( baseUrl+"credentialDemo/artifacts", - path.Join(i.baseStorePath, folderZKArtifacts), + ZKPath, + zkutils.ProvingKeyFormatGoBin, zkutils.ZkFilesHashes{ - ProvingKey: "6d5bbfe45f36c0a9263df0236292d4d7fa4e081fa80a7801fdaefc00171a83ed", + ProvingKey: "bdefc89d07d1dfab75c43f09aedb9da876496c5c3967383337482e4c5ae4f7d3", VerificationKey: "12a730890e85e33d8bf0f2e54db41dcff875c2dc49011d7e2a283185f47ac0de", WitnessCalcWASM: "6b3c28c4842e04129674eb71dc84d76dd8b290c84987929d54d890b7b8bed211", }, @@ -359,20 +392,9 @@ func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { return true, nil } -func (i *Identity) getCredentialValidity(credID string) (*proof.CredentialValidity, error) { - // Get credential existance - credExis, err := i.ClaimDB.GetCredExist(credID) - if err != nil { - return nil, err - } - // Build credential validity - return i.id.HolderGetCredentialValidity(credExis) -} - -type CallbackProveClaim interface { - Fn(bool, error) -} - -func (i *Identity) ProveClaimWithCb(baseUrl string, credID string, c CallbackProveClaim) { - go func() { c.Fn(i.ProveClaim(baseUrl, credID)) }() +// ProveClaimZKWithCb sends a credentialValidity build from the given credentialExistance to a verifier. +// This method will generate a zero knowledge proof so the verifier can't see the content of the claim. +// The callback is used to check if the verifier has accepted the credential as valid in an async maner +func (i *Identity) ProveClaimZKWithCb(baseUrl string, credID string, c CallbackProveClaim) { + go func() { c.Fn(i.ProveClaimZK(baseUrl, credID)) }() } diff --git a/go/iden3mobile/identity_test.go b/go/iden3mobile/identity_test.go index ac9cc11..d0f05db 100644 --- a/go/iden3mobile/identity_test.go +++ b/go/iden3mobile/identity_test.go @@ -73,8 +73,8 @@ var timeBlock TimeBlock func TestMain(m *testing.M) { c = config{ Web3Url: "xxx", - IssuerUrl: "http://127.0.0.1:6100/api/unstable/", - VerifierUrl: "http://127.0.0.1:6200/api/unstable/", + IssuerUrl: "http://188.166.70.93:6100/api/unstable/", + VerifierUrl: "http://188.166.70.93:6200/api/unstable/", VerifierAttempts: 5, VerifierRetryPeriod: 6, HolderTicketPeriod: 1000, @@ -101,7 +101,7 @@ func (teh *testEventHandler) Send(ev *Event) { } // NewIdentityTest is like NewIdentity but uses a local implementation of the smart contract in idenPubOnChain -func NewIdentityTest(storePath, pass, web3Url string, checkTicketsPeriodMilis int, extraGenesisClaims *BytesArray, s Sender) (*Identity, error) { +func NewIdentityTest(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, extraGenesisClaims *BytesArray, s Sender) (*Identity, error) { if s == nil { s = &testEventHandler{} } @@ -110,11 +110,11 @@ func NewIdentityTest(storePath, pass, web3Url string, checkTicketsPeriodMilis in if err != nil { panic(err) } - return newIdentity(storePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, s) + return newIdentity(storePath, sharedStorePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, s) } // NewIdentityTestLoad is like NewIdentityLoad but uses a local implementation of the smart contract in idenPubOnChain -func NewIdentityTestLoad(storePath, pass, web3Url string, checkTicketsPeriodMilis int, s Sender) (*Identity, error) { +func NewIdentityTestLoad(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, s Sender) (*Identity, error) { if s == nil { s = &testEventHandler{} } @@ -123,23 +123,26 @@ func NewIdentityTestLoad(storePath, pass, web3Url string, checkTicketsPeriodMili if err != nil { panic(err) } - return newIdentityLoad(storePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, s) + return newIdentityLoad(storePath, sharedStorePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, s) } func TestNewIdentity(t *testing.T) { // New identity without extra claims + sharedDir, err := ioutil.TempDir("", "shared") + require.Nil(t, err) + rmDirs = append(rmDirs, sharedDir) dir1, err := ioutil.TempDir("", "identityTest") rmDirs = append(rmDirs, dir1) require.Nil(t, err) - id, err := NewIdentityTest(dir1, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id, err := NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Stop identity id.Stop() // Error when creating new identity on a non empty dir - _, err = NewIdentityTest(dir1, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + _, err = NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Error(t, err) // Load identity - id, err = NewIdentityTestLoad(dir1, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, nil) + id, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, nil) require.Nil(t, err) // Stop identity id.Stop() diff --git a/go/iden3mobile/ticketshandlers_test.go b/go/iden3mobile/ticketshandlers_test.go index e9d3e30..6f0ffa1 100644 --- a/go/iden3mobile/ticketshandlers_test.go +++ b/go/iden3mobile/ticketshandlers_test.go @@ -82,6 +82,9 @@ func TestHolderHandlers(t *testing.T) { expectedEvents = make(map[string]testEvent) // Create two new identities without extra claims + sharedDir, err := ioutil.TempDir("", "shared") + require.Nil(t, err) + rmDirs = append(rmDirs, sharedDir) dir1, err := ioutil.TempDir("", "holderTest1") require.Nil(t, err) rmDirs = append(rmDirs, dir1) @@ -89,24 +92,24 @@ func TestHolderHandlers(t *testing.T) { require.Nil(t, err) rmDirs = append(rmDirs, dir2) - id1, err := NewIdentityTest(dir1, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id1, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) - id2, err := NewIdentityTest(dir2, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id2, err := NewIdentityTest(dir2, sharedDir, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Request claim - t1, err := id1.RequestClaim(c.IssuerUrl, randomBase64String(80)) + t1, err := id1.RequestClaim(c.IssuerUrl, randomBase64String(16)) require.Nil(t, err) expectedEvents[t1.Id] = testEvent{Typ: t1.Type} - t2, err := id2.RequestClaim(c.IssuerUrl, randomBase64String(80)) + t2, err := id2.RequestClaim(c.IssuerUrl, randomBase64String(16)) require.Nil(t, err) expectedEvents[t2.Id] = testEvent{Typ: t2.Type} // Test that tickets are persisted by reloading identities id1.Stop() id2.Stop() - id1, err = NewIdentityTestLoad(dir1, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, nil) + id1, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, nil) require.Nil(t, err) - id2, err = NewIdentityTestLoad(dir2, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, nil) + id2, err = NewIdentityTestLoad(dir2, sharedDir, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, nil) require.Nil(t, err) // Wait for the events that will get triggered on issuer response nAtempts := 1000 // TODO: go back to 10 atempts @@ -124,11 +127,11 @@ func TestHolderHandlers(t *testing.T) { require.NoError(t, err) // Prove Claims with ZK isSuccess, err = id1.ProveClaimZK(c.VerifierUrl, id1ClaimID[:]) - require.True(t, isSuccess) require.NoError(t, err) - isSuccess, err = id2.ProveClaimZK(c.VerifierUrl, id2ClaimID[:]) require.True(t, isSuccess) + isSuccess, err = id2.ProveClaimZK(c.VerifierUrl, id2ClaimID[:]) require.NoError(t, err) + require.True(t, isSuccess) // Stop identities id1.Stop() id2.Stop() @@ -209,7 +212,9 @@ func TestStressIdentity(t *testing.T) { ) time.Sleep(200 * time.Millisecond) } - + sharedDir, err := ioutil.TempDir("", "shared") + require.Nil(t, err) + rmDirs = append(rmDirs, sharedDir) dir1, err := ioutil.TempDir("", "holderStressTest") require.Nil(t, err) rmDirs = append(rmDirs, dir1) @@ -222,7 +227,7 @@ func TestStressIdentity(t *testing.T) { } claimsLen := n * m testStressIdentityWg.Add(claimsLen) - iden, err := NewIdentityTest(dir1, "pass_TestHolder_1", c.Web3Url, 400, NewBytesArray(), ha) + iden, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, 400, NewBytesArray(), ha) require.Nil(t, err) // Request claims diff --git a/go/mockupserver/mockupserver.go b/go/mockupserver/mockupserver.go index 35be9c0..d9d849c 100644 --- a/go/mockupserver/mockupserver.go +++ b/go/mockupserver/mockupserver.go @@ -122,6 +122,7 @@ func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, Files: *zkutils.NewZkFiles( "http://161.35.72.58:9000/circuit-idstate/", "/tmp/iden3/idenstatezk", + zkutils.ProvingKeyFormatJSON, zkutils.ZkFilesHashes{ ProvingKey: "2c72fceb10323d8b274dbd7649a63c1b6a11fff3a1e4cd7f5ec12516f32ec452", VerificationKey: "473952ff80aef85403005eb12d1e78a3f66b1cc11e7bd55d6bfe94e0b5577640", From 1a0a324f5a8cd34c1014e922058663ac16813304 Mon Sep 17 00:00:00 2001 From: Eduard S Date: Wed, 27 May 2020 13:30:00 +0200 Subject: [PATCH 05/10] Update mockupserver to work with zkp --- go/go.mod | 4 +- go/go.sum | 5 ++ go/iden3mobile/.gitignore | 1 + go/iden3mobile/identity.go | 22 ++++--- go/iden3mobile/identity_test.go | 75 ++++++++++++++++-------- go/iden3mobile/ticketshandlers_test.go | 79 +++++++++++++------------- go/mockupserver/mockupserver.go | 75 +++++++++++++++++------- 7 files changed, 168 insertions(+), 93 deletions(-) create mode 100644 go/iden3mobile/.gitignore diff --git a/go/go.mod b/go/go.mod index 2b76705..94db840 100644 --- a/go/go.mod +++ b/go/go.mod @@ -17,10 +17,10 @@ require ( github.com/gorilla/websocket v1.4.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169 - github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585 + github.com/iden3/go-iden3-core v0.0.8-0.20200527125702-3ace820b1db5 github.com/iden3/go-iden3-crypto v0.0.5-0.20200525100545-2c471ab54594 github.com/iden3/go-iden3-servers v0.0.2-0.20200525092853-167fda8ae7d9 - github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2 + github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200526103419-f7ca2547ec7b github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect diff --git a/go/go.sum b/go/go.sum index f204c87..545a7d4 100644 --- a/go/go.sum +++ b/go/go.sum @@ -224,6 +224,7 @@ github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169 h1 github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169/go.mod h1:ZGStP/GSsKbIaLEowo7JmqnWgneFAapA4NrZakHcUk4= github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429 h1:UTGpt2GCsNNC2sSYS6iBUDnR75HiCkogHdVSI2JyUsk= github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429/go.mod h1:c3FEU+iwM55k0lvzpwkCk5ljmv+gV2nnkCVHiuUDxFo= +github.com/iden3/go-circom-witnesscalc v0.0.0-20200527122314-25592ab9b33b/go.mod h1:hfw0CzjWlsvZOtOxXsiet+ZuN5YJCSNKvOa4VSsjjvI= github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463 h1:faZIi4aAYXgsSrF9uevL+eI1JnZ1vE0aFu3AU8Vuedk= github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463/go.mod h1:mMnPlXVspF49lxOb7/fqp7VCfD/YYEBvAjnUt+dkM8s= github.com/iden3/go-iden3-core v0.0.8-0.20200521103313-a008b6977d6f h1:/xG3cR2aCu0OSPRoUP3eYT5bcCa+xmX2bvCfRpv+H/8= @@ -234,6 +235,8 @@ github.com/iden3/go-iden3-core v0.0.8-0.20200522154712-780c4e804a1a h1:rs7dwrs8A github.com/iden3/go-iden3-core v0.0.8-0.20200522154712-780c4e804a1a/go.mod h1:gmpIFRakc/EJg1anHL3h0VK2EHk0Z/+1jN9m9PzZ51Y= github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585 h1:+jHFxk9mtgIiX0kxoGGqFQ7iM8ykAszoGqknaUiwtKk= github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585/go.mod h1:R0kslW82OPgUVap2cGi87yIDCCwB349CHUKsmI4T+PA= +github.com/iden3/go-iden3-core v0.0.8-0.20200527125702-3ace820b1db5 h1:b/x06Yrc5GwR99US5lZqIzWKkm+vsYTFQ8q0vl3Zxw4= +github.com/iden3/go-iden3-core v0.0.8-0.20200527125702-3ace820b1db5/go.mod h1:Q7WvN8UBKd4nyQ23Sx5kPKUinRovBFOSN241+Fk49L4= github.com/iden3/go-iden3-crypto v0.0.5-0.20200421133134-14c3144613d4/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f h1:geZ9S70cAAo/Dtu9LvUKjWs0rBsDZjWdYzSCkNc+gVE= github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= @@ -248,6 +251,8 @@ github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3 h1:L github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3/go.mod h1:h3c3VvlEj8cNqzsRWD0nAgCfBf4IhDXB6+no4emmS44= github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2 h1:AR7fJjK65NS54kEVxYx0Knd9YfmCgs80emvUGcfefqg= github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2/go.mod h1:vSe8kUyBVA4VqLEvprWEaZGpcgZgFoyncdoHO5snwxc= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200526103419-f7ca2547ec7b h1:VlYv6Pu8rAN9jB/m/kK2pUkKD+tIlYRrPd8QdiaSZIk= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200526103419-f7ca2547ec7b/go.mod h1:vSe8kUyBVA4VqLEvprWEaZGpcgZgFoyncdoHO5snwxc= github.com/iden3/go-public-key-encryption v0.0.0-20200129111956-c21e08c0ca6d/go.mod h1:ywEbbcgoETcOzZQ7YedY67DfG8tPuHbH89yn0zhjjeU= github.com/iden3/go-wasm3 v0.0.0-20200407092348-656263e6984f/go.mod h1:j+TcAB94Dfrjlu5kJt83h2OqAU+oyNUTwNZnQyII1sI= github.com/iden3/go-wasm3 v0.0.0-20200514131940-7bb78777b8ec h1:uQR2IqYOH/y0f4NNdYnw5iw6CCVbWiuA2iVd0pdyXWU= diff --git a/go/iden3mobile/.gitignore b/go/iden3mobile/.gitignore new file mode 100644 index 0000000..1d3ed4c --- /dev/null +++ b/go/iden3mobile/.gitignore @@ -0,0 +1 @@ +config.yml diff --git a/go/iden3mobile/identity.go b/go/iden3mobile/identity.go index cd41af4..d300b88 100644 --- a/go/iden3mobile/identity.go +++ b/go/iden3mobile/identity.go @@ -43,7 +43,7 @@ const ( storageSubPath = "/idStore" keyStorageSubPath = "/idKeyStore" smartContractAddress = "0x4cd72fcedf61937ffc8995d7c0839c976f3cc129" - credExisPrefix = "credExis" + credExistPrefix = "credExist" folderStore = "store" folderKeyStore = "keystore" folderZKArtifacts = "ZKArtifacts" @@ -214,7 +214,7 @@ func newIdentityLoad(storePath, sharedStorePath, pass string, idenPubOnChain ide Tickets: NewTickets(storage.WithPrefix([]byte(ticketPrefix))), stopTickets: make(chan bool), eventMan: em, - ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExisPrefix))), + ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExistPrefix))), } go iden.Tickets.CheckPending(iden, eventQueue, time.Duration(checkTicketsPeriodMilis)*time.Millisecond, iden.stopTickets) return iden, nil @@ -293,12 +293,12 @@ func (i *Identity) ProveClaim(baseUrl string, credID string) (bool, error) { func (i *Identity) getCredentialValidity(credID string) (*proof.CredentialValidity, error) { // Get credential existance - credExis, err := i.ClaimDB.GetCredExist(credID) + credExist, err := i.ClaimDB.GetCredExist(credID) if err != nil { return nil, err } // Build credential validity - return i.id.HolderGetCredentialValidity(credExis) + return i.id.HolderGetCredentialValidity(credExist) } // CallbackProveClaim is a interface used to get an asynchronous response from @@ -318,11 +318,19 @@ func (i *Identity) ProveClaimWithCb(baseUrl string, credID string, c CallbackPro // The response should be true if the verified accepted the prove as valid. func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { // Get credential existance - credExis, err := i.ClaimDB.GetCredExist(credID) + credExist, err := i.ClaimDB.GetCredExist(credID) if err != nil { return false, err } + // DBG BEGIN + // claimHex := make([]string, 8) + // for i := 0; i < 8; i++ { + // claimHex[i] = hex.EncodeToString(credExist.Claim.Data[i][:]) + // } + // log.WithField("claim", claimHex).Debug("ProveClaimZK") + // DBG END + // Build credential ownership zk proof // WARNING: this is a hardcoded proof generation for a specific claim/circuit. // In the future we will add some mechanism that can deduce how to generate an arbitrary proof. @@ -357,8 +365,8 @@ func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { return false, err } zkProofCredOut, err := i.id.HolderGenZkProofCredential( - credExis, - addInputs(credExis.Claim), + credExist, + addInputs(credExist.Claim), 4, 16, zkutils.NewZkFiles( diff --git a/go/iden3mobile/identity_test.go b/go/iden3mobile/identity_test.go index d0f05db..8f0e5d7 100644 --- a/go/iden3mobile/identity_test.go +++ b/go/iden3mobile/identity_test.go @@ -7,14 +7,13 @@ import ( "testing" "time" - zktypes "github.com/iden3/go-circom-prover-verifier/types" idenpubonchainlocal "github.com/iden3/go-iden3-core/components/idenpubonchain/local" + zkutils "github.com/iden3/go-iden3-core/utils/zk" log "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" ) type config struct { - Web3Url string `yaml:"web3Url"` IssuerUrl string `yaml:"issuerUrl"` VerifierUrl string `yaml:"verifierUrl"` VerifierAttempts int `yaml:"verifierAttempts"` @@ -69,12 +68,44 @@ func (tb *TimeBlock) Block() uint64 { } var timeBlock TimeBlock +var zkFilesIdenState *zkutils.ZkFiles +var zkFilesCredential *zkutils.ZkFiles func TestMain(m *testing.M) { + log.SetLevel(log.DebugLevel) + + zkFilesIdenState = zkutils.NewZkFiles( + "http://161.35.72.58:9000/circuit-idstate/", "/tmp/iden3-test/idenstatezk-issuer", + zkutils.ProvingKeyFormatGoBin, + zkutils.ZkFilesHashes{ + ProvingKey: "37b6b3addd52faf9357f1496312e6a86af4f5c41c557cda9931468809d32c03c", + VerificationKey: "473952ff80aef85403005eb12d1e78a3f66b1cc11e7bd55d6bfe94e0b5577640", + WitnessCalcWASM: "8eafd9314c4d2664a23bf98a4f42cd0c29984960ae3544747ba5fbd60905c41f", + }, true) + if err := zkFilesIdenState.DownloadAll(); err != nil { + panic(err) + } + + vk, err := zkFilesIdenState.VerificationKey() + if err != nil { + panic(err) + } + + zkFilesCredential = zkutils.NewZkFiles( + "http://161.35.72.58:9000/credentialDemoWrapper", "/tmp/iden3-test/credentialzk", + zkutils.ProvingKeyFormatGoBin, + zkutils.ZkFilesHashes{ + ProvingKey: "bdefc89d07d1dfab75c43f09aedb9da876496c5c3967383337482e4c5ae4f7d3", + VerificationKey: "12a730890e85e33d8bf0f2e54db41dcff875c2dc49011d7e2a283185f47ac0de", + WitnessCalcWASM: "6b3c28c4842e04129674eb71dc84d76dd8b290c84987929d54d890b7b8bed211", + }, true) + if err := zkFilesCredential.DownloadAll(); err != nil { + panic(err) + } + c = config{ - Web3Url: "xxx", - IssuerUrl: "http://188.166.70.93:6100/api/unstable/", - VerifierUrl: "http://188.166.70.93:6200/api/unstable/", + IssuerUrl: "http://127.0.0.1:1234/", + VerifierUrl: "http://127.0.0.1:1234/", VerifierAttempts: 5, VerifierRetryPeriod: 6, HolderTicketPeriod: 1000, @@ -82,7 +113,7 @@ func TestMain(m *testing.M) { idenPubOnChain = idenpubonchainlocal.New( timeBlock.Time, timeBlock.Block, - &zktypes.Vk{}, + vk, ) // Create a tmp directory to store test files // Run tests @@ -101,29 +132,24 @@ func (teh *testEventHandler) Send(ev *Event) { } // NewIdentityTest is like NewIdentity but uses a local implementation of the smart contract in idenPubOnChain -func NewIdentityTest(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, extraGenesisClaims *BytesArray, s Sender) (*Identity, error) { +func NewIdentityTest(storePath, sharedStorePath, pass string, + idenPubOnChain *idenpubonchainlocal.IdenPubOnChain, checkTicketsPeriodMilis int, + extraGenesisClaims *BytesArray, s Sender) (*Identity, error) { if s == nil { s = &testEventHandler{} } - // TODO: tmpIdenPubOnChain ==> idenPubOnChain - tmpIdenPubOnChain, err := loadIdenPubOnChain(web3Url) - if err != nil { - panic(err) - } - return newIdentity(storePath, sharedStorePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, s) + return newIdentity(storePath, sharedStorePath, pass, idenPubOnChain, checkTicketsPeriodMilis, + extraGenesisClaims, s) } // NewIdentityTestLoad is like NewIdentityLoad but uses a local implementation of the smart contract in idenPubOnChain -func NewIdentityTestLoad(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, s Sender) (*Identity, error) { +func NewIdentityTestLoad(storePath, sharedStorePath, pass string, + idenPubOnChain *idenpubonchainlocal.IdenPubOnChain, checkTicketsPeriodMilis int, + s Sender) (*Identity, error) { if s == nil { s = &testEventHandler{} } - // TODO: tmpIdenPubOnChain ==> idenPubOnChain - tmpIdenPubOnChain, err := loadIdenPubOnChain(web3Url) - if err != nil { - panic(err) - } - return newIdentityLoad(storePath, sharedStorePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, s) + return newIdentityLoad(storePath, sharedStorePath, pass, idenPubOnChain, checkTicketsPeriodMilis, s) } func TestNewIdentity(t *testing.T) { @@ -134,15 +160,18 @@ func TestNewIdentity(t *testing.T) { dir1, err := ioutil.TempDir("", "identityTest") rmDirs = append(rmDirs, dir1) require.Nil(t, err) - id, err := NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id, err := NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Stop identity id.Stop() // Error when creating new identity on a non empty dir - _, err = NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + _, err = NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Error(t, err) // Load identity - id, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, nil) + id, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestNewIdentity", idenPubOnChain, + c.HolderTicketPeriod, nil) require.Nil(t, err) // Stop identity id.Stop() diff --git a/go/iden3mobile/ticketshandlers_test.go b/go/iden3mobile/ticketshandlers_test.go index 6f0ffa1..ac062c9 100644 --- a/go/iden3mobile/ticketshandlers_test.go +++ b/go/iden3mobile/ticketshandlers_test.go @@ -59,26 +59,28 @@ func holderEventHandler(ev *Event) { func TestHolderHandlers(t *testing.T) { // Sync idenPubOnChain every 2 seconds - // go func() { - // for { - // log.Info("idenPubOnChain.Sync()") - // timeBlock.AddTime(10) - // timeBlock.AddBlock(1) - // idenPubOnChain.Sync() - // time.Sleep(2 * time.Second) - // } - // }() + go func() { + for { + log.Info("idenPubOnChain.Sync()") + timeBlock.AddTime(100) + timeBlock.AddBlock(10) + idenPubOnChain.Sync() + time.Sleep(2 * time.Second) + } + }() // // Start mockup server - // server := mockupserver.Serve(t, &mockupserver.Conf{ - // IP: "127.0.0.1", - // Port: "1234", - // TimeToAproveClaim: 1 * time.Second, - // TimeToPublish: 2 * time.Second, - // }, - // idenPubOnChain, - // ) - // time.Sleep(1 * time.Second) + server := mockupserver.Serve(t, &mockupserver.Conf{ + IP: "127.0.0.1", + Port: "1234", + TimeToAproveClaim: 1 * time.Second, + TimeToPublish: 2 * time.Second, + }, + idenPubOnChain, + zkFilesIdenState, + zkFilesCredential, + ) + time.Sleep(1 * time.Second) expectedEvents = make(map[string]testEvent) // Create two new identities without extra claims @@ -92,9 +94,11 @@ func TestHolderHandlers(t *testing.T) { require.Nil(t, err) rmDirs = append(rmDirs, dir2) - id1, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id1, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) - id2, err := NewIdentityTest(dir2, sharedDir, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id2, err := NewIdentityTest(dir2, sharedDir, "pass_TestHolder_2", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Request claim t1, err := id1.RequestClaim(c.IssuerUrl, randomBase64String(16)) @@ -107,9 +111,11 @@ func TestHolderHandlers(t *testing.T) { // Test that tickets are persisted by reloading identities id1.Stop() id2.Stop() - id1, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, nil) + id1, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestHolder_1", idenPubOnChain, + c.HolderTicketPeriod, nil) require.Nil(t, err) - id2, err = NewIdentityTestLoad(dir2, sharedDir, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, nil) + id2, err = NewIdentityTestLoad(dir2, sharedDir, "pass_TestHolder_2", idenPubOnChain, + c.HolderTicketPeriod, nil) require.Nil(t, err) // Wait for the events that will get triggered on issuer response nAtempts := 1000 // TODO: go back to 10 atempts @@ -136,8 +142,8 @@ func TestHolderHandlers(t *testing.T) { id1.Stop() id2.Stop() - // err = server.Shutdown(context.Background()) - // require.Nil(t, err) + err = server.Shutdown(context.Background()) + require.Nil(t, err) } func randomBase64String(l int) string { @@ -209,6 +215,8 @@ func TestStressIdentity(t *testing.T) { TimeToPublish: 500 * time.Millisecond, }, idenPubOnChain, + zkFilesIdenState, + zkFilesCredential, ) time.Sleep(200 * time.Millisecond) } @@ -227,7 +235,7 @@ func TestStressIdentity(t *testing.T) { } claimsLen := n * m testStressIdentityWg.Add(claimsLen) - iden, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, 400, NewBytesArray(), ha) + iden, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", idenPubOnChain, 400, NewBytesArray(), ha) require.Nil(t, err) // Request claims @@ -236,7 +244,7 @@ func TestStressIdentity(t *testing.T) { for _j := 0; _j < m; _j++ { j := _j go func() { - t1, err := iden.RequestClaim(fmt.Sprintf("http://127.0.0.1:9%03d/", i), randomBase64String(80)) + t1, err := iden.RequestClaim(fmt.Sprintf("http://127.0.0.1:9%03d/", i), randomBase64String(16)) require.Nil(t, err) log.WithField("TicketId", t1.Id).WithField("i", i).WithField("j", j).Info("--- Request claim ---") mutex.Lock() @@ -266,21 +274,10 @@ func TestStressIdentity(t *testing.T) { wg.Add(1) id := _id go func() { - i := 0 - for ; i < c.VerifierAttempts; i++ { - success1, err := iden.ProveClaim("http://127.0.0.1:9000", id) - if err != nil { - log.Error("Error proving claim: ", err) - } - if success1 { - wg.Done() - break - } - time.Sleep(time.Duration(400 * time.Millisecond)) - } - if i == c.VerifierAttempts { - panic(fmt.Errorf("Reached maximum number of loops for iden.ProveClaim")) - } + success1, err := iden.ProveClaim("http://127.0.0.1:9000", id) + require.Nil(t, err) + require.True(t, success1) + wg.Done() }() if k >= 16 { time.Sleep(200 * time.Millisecond) diff --git a/go/mockupserver/mockupserver.go b/go/mockupserver/mockupserver.go index d9d849c..38b90af 100644 --- a/go/mockupserver/mockupserver.go +++ b/go/mockupserver/mockupserver.go @@ -14,6 +14,7 @@ import ( idenpuboffchainwriterhttp "github.com/iden3/go-iden3-core/components/idenpuboffchain/writerhttp" "github.com/iden3/go-iden3-core/components/idenpubonchain" "github.com/iden3/go-iden3-core/components/verifier" + "github.com/iden3/go-iden3-core/core" "github.com/iden3/go-iden3-core/core/claims" "github.com/iden3/go-iden3-core/db" "github.com/iden3/go-iden3-core/identity/issuer" @@ -71,13 +72,14 @@ func (r *Requests) Approve(id int, claim merkletree.Entrier) error { return nil } -func (r *Requests) Add(value string) int { +func (r *Requests) Add(value, index string) int { r.rw.Lock() defer r.rw.Unlock() r.n += 1 request := messages.Request{ Id: r.n, Value: value, + Index: index, Status: messages.RequestStatusPending, } r.pending[request.Id] = request @@ -96,6 +98,16 @@ func (r *Requests) Get(id int) (*messages.Request, error) { return nil, fmt.Errorf("Request id: %v not found", id) } +func newClaimDemo(id *core.ID, index, value []byte) claims.Claimer { + indexBytes, valueBytes := [claims.IndexSubjectSlotLen]byte{}, [claims.ValueSlotLen]byte{} + if len(index) > 248/8*2 || len(value) > 248/8*3 { + panic("index or value too long") + } + copy(indexBytes[152/8:], index[:]) + copy(valueBytes[216/8:], value[:]) + return claims.NewClaimOtherIden(id, indexBytes, valueBytes) +} + type Conf struct { IP string Port string @@ -104,7 +116,9 @@ type Conf struct { } func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, - idenPubOffChainWrite idenpuboffchain.IdenPubOffChainWriter) *issuer.Issuer { + idenPubOffChainWrite idenpuboffchain.IdenPubOffChainWriter, + zkFilesIdenState *zkutils.ZkFiles, +) *issuer.Issuer { cfg := issuer.ConfigDefault storage := db.NewMemoryStorage() ksStorage := keystore.MemStorage([]byte{}) @@ -119,17 +133,7 @@ func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, require.Nil(t, err) idenStateZkProofConf := &issuer.IdenStateZkProofConf{ Levels: 16, - Files: *zkutils.NewZkFiles( - "http://161.35.72.58:9000/circuit-idstate/", - "/tmp/iden3/idenstatezk", - zkutils.ProvingKeyFormatJSON, - zkutils.ZkFilesHashes{ - ProvingKey: "2c72fceb10323d8b274dbd7649a63c1b6a11fff3a1e4cd7f5ec12516f32ec452", - VerificationKey: "473952ff80aef85403005eb12d1e78a3f66b1cc11e7bd55d6bfe94e0b5577640", - WitnessCalcWASM: "8eafd9314c4d2664a23bf98a4f42cd0c29984960ae3544747ba5fbd60905c41f", - }, - true, - ), + Files: *zkFilesIdenState, } is, err := issuer.Load( storage, @@ -142,13 +146,16 @@ func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, return is } -func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChainer) *http.Server { +func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChainer, + zkFilesIdenState *zkutils.ZkFiles, + zkFilesCredential *zkutils.ZkFiles, +) *http.Server { idenPubOffChainWrite, err := idenpuboffchainwriterhttp.NewIdenPubOffChainWriteHttp( idenpuboffchainwriterhttp.NewConfigDefault(fmt.Sprintf("http://%v:%v/idenpublicdata/", cfg.IP, cfg.Port)), db.NewMemoryStorage(), ) require.Nil(t, err) - is := NewIssuer(t, idenPubOnChain, idenPubOffChainWrite) + is := NewIssuer(t, idenPubOnChain, idenPubOffChainWrite, zkFilesIdenState) requests := NewRequests() verif := verifier.New(idenPubOnChain) @@ -157,7 +164,9 @@ func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChain for { err := is.PublishState() if err != nil { - log.WithError(err).Warn("Issuer.PublishState()") + if err != issuer.ErrIdenStatePendingNotNil { + log.WithError(err).Error("Issuer.PublishState()") + } } err = is.SyncIdenStatePublic() if err != nil { @@ -181,13 +190,14 @@ func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChain if err := ShouldBindJSONValidate(c, &req); err != nil { return } - id := requests.Add(req.Value) + id := requests.Add(req.Index, req.Value) // Approve request and issue claim after c.TimeToAproveClaim duration go func() { time.Sleep(cfg.TimeToAproveClaim) - indexSlot, valueSlot := [claims.IndexSlotLen]byte{}, [claims.ValueSlotLen]byte{} - copy(indexSlot[:], []byte(req.Value)) - claim := claims.NewClaimBasic(indexSlot, valueSlot) + + claim := newClaimDemo(req.HolderID, + append([]byte("Mia kusenveturilo estas plena je angiloj."), []byte(req.Index)...), + []byte(req.Value)) // Issue Claim if err := is.IssueClaim(claim); err != nil { @@ -296,6 +306,31 @@ func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChain c.JSON(200, gin.H{}) }) + api.Static("/credentialDemo/artifacts", zkFilesCredential.Path) + + api.POST("/credentialDemo/verifyzkp", func(c *gin.Context) { + + var req verifierMsg.ReqVerifyZkp + if err := c.ShouldBindJSON(&req); err != nil { + handlers.Fail(c, "cannot parse json body", err) + return + } + err := verif.VerifyZkProofCredential( + req.ZkProof, + req.PubSignals, + req.IssuerID, + req.IdenStateBlockN, + zkFilesCredential, + 30*time.Minute, + ) + if err != nil { + handlers.Fail(c, "VerifyZkProofCredential()", err) + return + } + + c.JSON(200, gin.H{}) + }) + server := &http.Server{Addr: fmt.Sprintf("%v:%v", cfg.IP, cfg.Port), Handler: api} go func() { From 7e6885e236310b3f5fc6092e485b203afdb46338 Mon Sep 17 00:00:00 2001 From: Eduard S Date: Wed, 27 May 2020 14:15:31 +0200 Subject: [PATCH 06/10] Increase go test timeout --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 37fe9d6..3801755 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -39,7 +39,7 @@ jobs: run: | cd go/iden3mobile go get -v -t -d ./... - go test -v -count=1 ${{ matrix.flags }} ./... + go test -v -timeout 30m -count=1 ${{ matrix.flags }} ./... goAndroidIntegrationTest: name: Bind Go code to Android and test From fbe3f23867b65f862c2c72b93041e782f348e733 Mon Sep 17 00:00:00 2001 From: a_bennassar Date: Wed, 27 May 2020 15:50:16 +0200 Subject: [PATCH 07/10] Add action to bindo Go to iOS and release it --- .github/workflows/gomobile.yml | 43 ++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gomobile.yml b/.github/workflows/gomobile.yml index a8c7513..2cd130d 100644 --- a/.github/workflows/gomobile.yml +++ b/.github/workflows/gomobile.yml @@ -7,7 +7,7 @@ on: - go/** jobs: - build: + bind-go-android: name: Gomobile runs-on: ubuntu-latest steps: @@ -16,7 +16,7 @@ jobs: - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Build - id: build + id: bind-android run: | mkdir -p /tmp/builds docker pull ed255/gomobile-android:API29-noemu @@ -71,8 +71,8 @@ jobs: tag_name: ${{ steps.next_version.outputs.version }} release_name: Release ${{ steps.next_version.outputs.version }} body: | - * SHA256 (iden3mobile.aar) = `${{ steps.build.outputs.sha256_aar }}` - * SHA256 (iden3mobile-sources.jar) = `${{ steps.build.outputs.sha256_jar }}` + * SHA256 (iden3mobile.aar) = `${{ steps.bind-android.outputs.sha256_aar }}` + * SHA256 (iden3mobile-sources.jar) = `${{ steps.bind-android.outputs.sha256_jar }}` draft: false prerelease: true @@ -105,4 +105,37 @@ jobs: cd /tmp/builds/out mvn deploy:deploy-file -Dfile=iden3mobile.aar -Durl=https://maven.pkg.github.com/iden3/iden3-mobile -DrepositoryId=github -DrepositoryName="GitHub Pages" -Dfiles=iden3mobile-sources.jar -Dtypes=jar -Dclassifiers=sources -DgroupId=com.iden3 -DartifactId=iden3mobile -Dversion="${{ steps.next_version.outputs.version }}" -Dpackaging=aar env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + bind-go-ios: + name: Test Go + runs-on: macos-latest + steps: + + - uses: actions/checkout@v2 + - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* + + - name: Set up Go 1.14 + uses: actions/setup-go@v1 + with: + go-version: 1.14 + + - name: Bind to iOS + run: | + go get golang.org/x/mobile/cmd/gomobile + PATH=$PATH:/Users/runner/go/bin + export PATH + cd go/iden3mobile + mkdir -p /tmp/build + gomobile init + gomobile bind --target ios -o /tmp/build/Iden3mobile.framework + + - name: Release framework + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: /tmp/build/Iden3mobile.framework + asset_name: Iden3mobile.framework + asset_content_type: application/zip \ No newline at end of file From edc83f2ebaba89a229bcc1a2bbeffddbb66ebb4a Mon Sep 17 00:00:00 2001 From: a_bennassar Date: Wed, 27 May 2020 16:37:42 +0200 Subject: [PATCH 08/10] Fix build.gradle file names --- android/gointegration/_build.gradle | 69 --------------------------- android/gointegration/build.GHAgradle | 56 ++++++++++++++++++++++ android/gointegration/build.gradle | 47 +++++++++++------- 3 files changed, 86 insertions(+), 86 deletions(-) delete mode 100644 android/gointegration/_build.gradle create mode 100644 android/gointegration/build.GHAgradle diff --git a/android/gointegration/_build.gradle b/android/gointegration/_build.gradle deleted file mode 100644 index 3f0574d..0000000 --- a/android/gointegration/_build.gradle +++ /dev/null @@ -1,69 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' - -buildscript { - ext { - iden3mobile_version = 'v0.0.1-beta12' - } -} - -android { - compileSdkVersion 29 - buildToolsVersion "29.0.2" - ndkVersion "20.0.5594570" - - defaultConfig { - applicationId "com.iden3.gointegration" - minSdkVersion 19 - targetSdkVersion 29 - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - // Infura config - Properties infuraProperties = new Properties() - InputStream ins = new FileInputStream("infura.properties") - infuraProperties.load(ins) - ins.close() - buildConfigField("String", "INFURA_URL", infuraProperties['url']) - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - - repositories { - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/iden3/iden3-mobile") - credentials { - Properties githubProperties = new Properties() - InputStream ins = new FileInputStream("github.properties") - githubProperties.load(ins) - ins.close() - username = githubProperties['username'] - password = githubProperties['apikey'] - } - } - } -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - - androidTestImplementation 'androidx.test:core:1.2.0' - androidTestImplementation 'androidx.test:core-ktx:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - androidTestImplementation "com.iden3:iden3mobile:$iden3mobile_version" -} diff --git a/android/gointegration/build.GHAgradle b/android/gointegration/build.GHAgradle new file mode 100644 index 0000000..cff7050 --- /dev/null +++ b/android/gointegration/build.GHAgradle @@ -0,0 +1,56 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.2" + ndkVersion "20.0.5594570" + + defaultConfig { + applicationId "com.iden3.gointegration" + minSdkVersion 19 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + // Infura config + Properties infuraProperties = new Properties() + InputStream ins = new FileInputStream("infura.properties") + infuraProperties.load(ins) + ins.close() + buildConfigField("String", "INFURA_URL", infuraProperties['url']) + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + repositories { + flatDir{ + dirs 'src/libs' + } + } + +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.core:core-ktx:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + + androidTestImplementation 'androidx.test:core:1.2.0' + androidTestImplementation 'androidx.test:core-ktx:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + api(name:'iden3mobile', ext:'aar') +} + diff --git a/android/gointegration/build.gradle b/android/gointegration/build.gradle index cff7050..3f0574d 100644 --- a/android/gointegration/build.gradle +++ b/android/gointegration/build.gradle @@ -2,6 +2,12 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' +buildscript { + ext { + iden3mobile_version = 'v0.0.1-beta12' + } +} + android { compileSdkVersion 29 buildToolsVersion "29.0.2" @@ -15,6 +21,7 @@ android { versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + // Infura config Properties infuraProperties = new Properties() InputStream ins = new FileInputStream("infura.properties") @@ -31,26 +38,32 @@ android { } repositories { - flatDir{ - dirs 'src/libs' + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/iden3/iden3-mobile") + credentials { + Properties githubProperties = new Properties() + InputStream ins = new FileInputStream("github.properties") + githubProperties.load(ins) + ins.close() + username = githubProperties['username'] + password = githubProperties['apikey'] + } } } - } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - - androidTestImplementation 'androidx.test:core:1.2.0' - androidTestImplementation 'androidx.test:core-ktx:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - - api(name:'iden3mobile', ext:'aar') -} + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.core:core-ktx:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + androidTestImplementation 'androidx.test:core:1.2.0' + androidTestImplementation 'androidx.test:core-ktx:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.1' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + androidTestImplementation "com.iden3:iden3mobile:$iden3mobile_version" +} From 4c06137dc6c3718f346df6fac43fa61f0b37b056 Mon Sep 17 00:00:00 2001 From: Eduard S Date: Wed, 27 May 2020 13:30:00 +0200 Subject: [PATCH 09/10] Update mockupserver to work with zkp --- go/go.mod | 4 +- go/go.sum | 5 ++ go/iden3mobile/.gitignore | 1 + go/iden3mobile/identity.go | 22 ++++--- go/iden3mobile/identity_test.go | 75 ++++++++++++++++-------- go/iden3mobile/ticketshandlers_test.go | 79 +++++++++++++------------- go/mockupserver/mockupserver.go | 75 +++++++++++++++++------- 7 files changed, 168 insertions(+), 93 deletions(-) create mode 100644 go/iden3mobile/.gitignore diff --git a/go/go.mod b/go/go.mod index 2b76705..94db840 100644 --- a/go/go.mod +++ b/go/go.mod @@ -17,10 +17,10 @@ require ( github.com/gorilla/websocket v1.4.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169 - github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585 + github.com/iden3/go-iden3-core v0.0.8-0.20200527125702-3ace820b1db5 github.com/iden3/go-iden3-crypto v0.0.5-0.20200525100545-2c471ab54594 github.com/iden3/go-iden3-servers v0.0.2-0.20200525092853-167fda8ae7d9 - github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2 + github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200526103419-f7ca2547ec7b github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect diff --git a/go/go.sum b/go/go.sum index f204c87..545a7d4 100644 --- a/go/go.sum +++ b/go/go.sum @@ -224,6 +224,7 @@ github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169 h1 github.com/iden3/go-circom-prover-verifier v0.0.0-20200522153011-ec6920aa1169/go.mod h1:ZGStP/GSsKbIaLEowo7JmqnWgneFAapA4NrZakHcUk4= github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429 h1:UTGpt2GCsNNC2sSYS6iBUDnR75HiCkogHdVSI2JyUsk= github.com/iden3/go-circom-witnesscalc v0.0.0-20200429093613-a13396c6e429/go.mod h1:c3FEU+iwM55k0lvzpwkCk5ljmv+gV2nnkCVHiuUDxFo= +github.com/iden3/go-circom-witnesscalc v0.0.0-20200527122314-25592ab9b33b/go.mod h1:hfw0CzjWlsvZOtOxXsiet+ZuN5YJCSNKvOa4VSsjjvI= github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463 h1:faZIi4aAYXgsSrF9uevL+eI1JnZ1vE0aFu3AU8Vuedk= github.com/iden3/go-iden3-core v0.0.8-0.20200515134003-99b3cc33f463/go.mod h1:mMnPlXVspF49lxOb7/fqp7VCfD/YYEBvAjnUt+dkM8s= github.com/iden3/go-iden3-core v0.0.8-0.20200521103313-a008b6977d6f h1:/xG3cR2aCu0OSPRoUP3eYT5bcCa+xmX2bvCfRpv+H/8= @@ -234,6 +235,8 @@ github.com/iden3/go-iden3-core v0.0.8-0.20200522154712-780c4e804a1a h1:rs7dwrs8A github.com/iden3/go-iden3-core v0.0.8-0.20200522154712-780c4e804a1a/go.mod h1:gmpIFRakc/EJg1anHL3h0VK2EHk0Z/+1jN9m9PzZ51Y= github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585 h1:+jHFxk9mtgIiX0kxoGGqFQ7iM8ykAszoGqknaUiwtKk= github.com/iden3/go-iden3-core v0.0.8-0.20200526144704-bcd52448a585/go.mod h1:R0kslW82OPgUVap2cGi87yIDCCwB349CHUKsmI4T+PA= +github.com/iden3/go-iden3-core v0.0.8-0.20200527125702-3ace820b1db5 h1:b/x06Yrc5GwR99US5lZqIzWKkm+vsYTFQ8q0vl3Zxw4= +github.com/iden3/go-iden3-core v0.0.8-0.20200527125702-3ace820b1db5/go.mod h1:Q7WvN8UBKd4nyQ23Sx5kPKUinRovBFOSN241+Fk49L4= github.com/iden3/go-iden3-crypto v0.0.5-0.20200421133134-14c3144613d4/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f h1:geZ9S70cAAo/Dtu9LvUKjWs0rBsDZjWdYzSCkNc+gVE= github.com/iden3/go-iden3-crypto v0.0.5-0.20200428163115-b1468fc0760f/go.mod h1:XKw1oDwYn2CIxKOtr7m/mL5jMn4mLOxAxtZBRxQBev8= @@ -248,6 +251,8 @@ github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3 h1:L github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200519120403-69bcf6757ab3/go.mod h1:h3c3VvlEj8cNqzsRWD0nAgCfBf4IhDXB6+no4emmS44= github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2 h1:AR7fJjK65NS54kEVxYx0Knd9YfmCgs80emvUGcfefqg= github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200525093013-a63e86dc4ed2/go.mod h1:vSe8kUyBVA4VqLEvprWEaZGpcgZgFoyncdoHO5snwxc= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200526103419-f7ca2547ec7b h1:VlYv6Pu8rAN9jB/m/kK2pUkKD+tIlYRrPd8QdiaSZIk= +github.com/iden3/go-iden3-servers-demo v0.0.2-0.20200526103419-f7ca2547ec7b/go.mod h1:vSe8kUyBVA4VqLEvprWEaZGpcgZgFoyncdoHO5snwxc= github.com/iden3/go-public-key-encryption v0.0.0-20200129111956-c21e08c0ca6d/go.mod h1:ywEbbcgoETcOzZQ7YedY67DfG8tPuHbH89yn0zhjjeU= github.com/iden3/go-wasm3 v0.0.0-20200407092348-656263e6984f/go.mod h1:j+TcAB94Dfrjlu5kJt83h2OqAU+oyNUTwNZnQyII1sI= github.com/iden3/go-wasm3 v0.0.0-20200514131940-7bb78777b8ec h1:uQR2IqYOH/y0f4NNdYnw5iw6CCVbWiuA2iVd0pdyXWU= diff --git a/go/iden3mobile/.gitignore b/go/iden3mobile/.gitignore new file mode 100644 index 0000000..1d3ed4c --- /dev/null +++ b/go/iden3mobile/.gitignore @@ -0,0 +1 @@ +config.yml diff --git a/go/iden3mobile/identity.go b/go/iden3mobile/identity.go index cd41af4..d300b88 100644 --- a/go/iden3mobile/identity.go +++ b/go/iden3mobile/identity.go @@ -43,7 +43,7 @@ const ( storageSubPath = "/idStore" keyStorageSubPath = "/idKeyStore" smartContractAddress = "0x4cd72fcedf61937ffc8995d7c0839c976f3cc129" - credExisPrefix = "credExis" + credExistPrefix = "credExist" folderStore = "store" folderKeyStore = "keystore" folderZKArtifacts = "ZKArtifacts" @@ -214,7 +214,7 @@ func newIdentityLoad(storePath, sharedStorePath, pass string, idenPubOnChain ide Tickets: NewTickets(storage.WithPrefix([]byte(ticketPrefix))), stopTickets: make(chan bool), eventMan: em, - ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExisPrefix))), + ClaimDB: NewClaimDB(storage.WithPrefix([]byte(credExistPrefix))), } go iden.Tickets.CheckPending(iden, eventQueue, time.Duration(checkTicketsPeriodMilis)*time.Millisecond, iden.stopTickets) return iden, nil @@ -293,12 +293,12 @@ func (i *Identity) ProveClaim(baseUrl string, credID string) (bool, error) { func (i *Identity) getCredentialValidity(credID string) (*proof.CredentialValidity, error) { // Get credential existance - credExis, err := i.ClaimDB.GetCredExist(credID) + credExist, err := i.ClaimDB.GetCredExist(credID) if err != nil { return nil, err } // Build credential validity - return i.id.HolderGetCredentialValidity(credExis) + return i.id.HolderGetCredentialValidity(credExist) } // CallbackProveClaim is a interface used to get an asynchronous response from @@ -318,11 +318,19 @@ func (i *Identity) ProveClaimWithCb(baseUrl string, credID string, c CallbackPro // The response should be true if the verified accepted the prove as valid. func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { // Get credential existance - credExis, err := i.ClaimDB.GetCredExist(credID) + credExist, err := i.ClaimDB.GetCredExist(credID) if err != nil { return false, err } + // DBG BEGIN + // claimHex := make([]string, 8) + // for i := 0; i < 8; i++ { + // claimHex[i] = hex.EncodeToString(credExist.Claim.Data[i][:]) + // } + // log.WithField("claim", claimHex).Debug("ProveClaimZK") + // DBG END + // Build credential ownership zk proof // WARNING: this is a hardcoded proof generation for a specific claim/circuit. // In the future we will add some mechanism that can deduce how to generate an arbitrary proof. @@ -357,8 +365,8 @@ func (i *Identity) ProveClaimZK(baseUrl string, credID string) (bool, error) { return false, err } zkProofCredOut, err := i.id.HolderGenZkProofCredential( - credExis, - addInputs(credExis.Claim), + credExist, + addInputs(credExist.Claim), 4, 16, zkutils.NewZkFiles( diff --git a/go/iden3mobile/identity_test.go b/go/iden3mobile/identity_test.go index d0f05db..8f0e5d7 100644 --- a/go/iden3mobile/identity_test.go +++ b/go/iden3mobile/identity_test.go @@ -7,14 +7,13 @@ import ( "testing" "time" - zktypes "github.com/iden3/go-circom-prover-verifier/types" idenpubonchainlocal "github.com/iden3/go-iden3-core/components/idenpubonchain/local" + zkutils "github.com/iden3/go-iden3-core/utils/zk" log "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" ) type config struct { - Web3Url string `yaml:"web3Url"` IssuerUrl string `yaml:"issuerUrl"` VerifierUrl string `yaml:"verifierUrl"` VerifierAttempts int `yaml:"verifierAttempts"` @@ -69,12 +68,44 @@ func (tb *TimeBlock) Block() uint64 { } var timeBlock TimeBlock +var zkFilesIdenState *zkutils.ZkFiles +var zkFilesCredential *zkutils.ZkFiles func TestMain(m *testing.M) { + log.SetLevel(log.DebugLevel) + + zkFilesIdenState = zkutils.NewZkFiles( + "http://161.35.72.58:9000/circuit-idstate/", "/tmp/iden3-test/idenstatezk-issuer", + zkutils.ProvingKeyFormatGoBin, + zkutils.ZkFilesHashes{ + ProvingKey: "37b6b3addd52faf9357f1496312e6a86af4f5c41c557cda9931468809d32c03c", + VerificationKey: "473952ff80aef85403005eb12d1e78a3f66b1cc11e7bd55d6bfe94e0b5577640", + WitnessCalcWASM: "8eafd9314c4d2664a23bf98a4f42cd0c29984960ae3544747ba5fbd60905c41f", + }, true) + if err := zkFilesIdenState.DownloadAll(); err != nil { + panic(err) + } + + vk, err := zkFilesIdenState.VerificationKey() + if err != nil { + panic(err) + } + + zkFilesCredential = zkutils.NewZkFiles( + "http://161.35.72.58:9000/credentialDemoWrapper", "/tmp/iden3-test/credentialzk", + zkutils.ProvingKeyFormatGoBin, + zkutils.ZkFilesHashes{ + ProvingKey: "bdefc89d07d1dfab75c43f09aedb9da876496c5c3967383337482e4c5ae4f7d3", + VerificationKey: "12a730890e85e33d8bf0f2e54db41dcff875c2dc49011d7e2a283185f47ac0de", + WitnessCalcWASM: "6b3c28c4842e04129674eb71dc84d76dd8b290c84987929d54d890b7b8bed211", + }, true) + if err := zkFilesCredential.DownloadAll(); err != nil { + panic(err) + } + c = config{ - Web3Url: "xxx", - IssuerUrl: "http://188.166.70.93:6100/api/unstable/", - VerifierUrl: "http://188.166.70.93:6200/api/unstable/", + IssuerUrl: "http://127.0.0.1:1234/", + VerifierUrl: "http://127.0.0.1:1234/", VerifierAttempts: 5, VerifierRetryPeriod: 6, HolderTicketPeriod: 1000, @@ -82,7 +113,7 @@ func TestMain(m *testing.M) { idenPubOnChain = idenpubonchainlocal.New( timeBlock.Time, timeBlock.Block, - &zktypes.Vk{}, + vk, ) // Create a tmp directory to store test files // Run tests @@ -101,29 +132,24 @@ func (teh *testEventHandler) Send(ev *Event) { } // NewIdentityTest is like NewIdentity but uses a local implementation of the smart contract in idenPubOnChain -func NewIdentityTest(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, extraGenesisClaims *BytesArray, s Sender) (*Identity, error) { +func NewIdentityTest(storePath, sharedStorePath, pass string, + idenPubOnChain *idenpubonchainlocal.IdenPubOnChain, checkTicketsPeriodMilis int, + extraGenesisClaims *BytesArray, s Sender) (*Identity, error) { if s == nil { s = &testEventHandler{} } - // TODO: tmpIdenPubOnChain ==> idenPubOnChain - tmpIdenPubOnChain, err := loadIdenPubOnChain(web3Url) - if err != nil { - panic(err) - } - return newIdentity(storePath, sharedStorePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, extraGenesisClaims, s) + return newIdentity(storePath, sharedStorePath, pass, idenPubOnChain, checkTicketsPeriodMilis, + extraGenesisClaims, s) } // NewIdentityTestLoad is like NewIdentityLoad but uses a local implementation of the smart contract in idenPubOnChain -func NewIdentityTestLoad(storePath, sharedStorePath, pass, web3Url string, checkTicketsPeriodMilis int, s Sender) (*Identity, error) { +func NewIdentityTestLoad(storePath, sharedStorePath, pass string, + idenPubOnChain *idenpubonchainlocal.IdenPubOnChain, checkTicketsPeriodMilis int, + s Sender) (*Identity, error) { if s == nil { s = &testEventHandler{} } - // TODO: tmpIdenPubOnChain ==> idenPubOnChain - tmpIdenPubOnChain, err := loadIdenPubOnChain(web3Url) - if err != nil { - panic(err) - } - return newIdentityLoad(storePath, sharedStorePath, pass, tmpIdenPubOnChain, checkTicketsPeriodMilis, s) + return newIdentityLoad(storePath, sharedStorePath, pass, idenPubOnChain, checkTicketsPeriodMilis, s) } func TestNewIdentity(t *testing.T) { @@ -134,15 +160,18 @@ func TestNewIdentity(t *testing.T) { dir1, err := ioutil.TempDir("", "identityTest") rmDirs = append(rmDirs, dir1) require.Nil(t, err) - id, err := NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id, err := NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Stop identity id.Stop() // Error when creating new identity on a non empty dir - _, err = NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + _, err = NewIdentityTest(dir1, sharedDir, "pass_TestNewIdentity", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Error(t, err) // Load identity - id, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestNewIdentity", c.Web3Url, c.HolderTicketPeriod, nil) + id, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestNewIdentity", idenPubOnChain, + c.HolderTicketPeriod, nil) require.Nil(t, err) // Stop identity id.Stop() diff --git a/go/iden3mobile/ticketshandlers_test.go b/go/iden3mobile/ticketshandlers_test.go index 6f0ffa1..ac062c9 100644 --- a/go/iden3mobile/ticketshandlers_test.go +++ b/go/iden3mobile/ticketshandlers_test.go @@ -59,26 +59,28 @@ func holderEventHandler(ev *Event) { func TestHolderHandlers(t *testing.T) { // Sync idenPubOnChain every 2 seconds - // go func() { - // for { - // log.Info("idenPubOnChain.Sync()") - // timeBlock.AddTime(10) - // timeBlock.AddBlock(1) - // idenPubOnChain.Sync() - // time.Sleep(2 * time.Second) - // } - // }() + go func() { + for { + log.Info("idenPubOnChain.Sync()") + timeBlock.AddTime(100) + timeBlock.AddBlock(10) + idenPubOnChain.Sync() + time.Sleep(2 * time.Second) + } + }() // // Start mockup server - // server := mockupserver.Serve(t, &mockupserver.Conf{ - // IP: "127.0.0.1", - // Port: "1234", - // TimeToAproveClaim: 1 * time.Second, - // TimeToPublish: 2 * time.Second, - // }, - // idenPubOnChain, - // ) - // time.Sleep(1 * time.Second) + server := mockupserver.Serve(t, &mockupserver.Conf{ + IP: "127.0.0.1", + Port: "1234", + TimeToAproveClaim: 1 * time.Second, + TimeToPublish: 2 * time.Second, + }, + idenPubOnChain, + zkFilesIdenState, + zkFilesCredential, + ) + time.Sleep(1 * time.Second) expectedEvents = make(map[string]testEvent) // Create two new identities without extra claims @@ -92,9 +94,11 @@ func TestHolderHandlers(t *testing.T) { require.Nil(t, err) rmDirs = append(rmDirs, dir2) - id1, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id1, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) - id2, err := NewIdentityTest(dir2, sharedDir, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, NewBytesArray(), nil) + id2, err := NewIdentityTest(dir2, sharedDir, "pass_TestHolder_2", idenPubOnChain, + c.HolderTicketPeriod, NewBytesArray(), nil) require.Nil(t, err) // Request claim t1, err := id1.RequestClaim(c.IssuerUrl, randomBase64String(16)) @@ -107,9 +111,11 @@ func TestHolderHandlers(t *testing.T) { // Test that tickets are persisted by reloading identities id1.Stop() id2.Stop() - id1, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, c.HolderTicketPeriod, nil) + id1, err = NewIdentityTestLoad(dir1, sharedDir, "pass_TestHolder_1", idenPubOnChain, + c.HolderTicketPeriod, nil) require.Nil(t, err) - id2, err = NewIdentityTestLoad(dir2, sharedDir, "pass_TestHolder_2", c.Web3Url, c.HolderTicketPeriod, nil) + id2, err = NewIdentityTestLoad(dir2, sharedDir, "pass_TestHolder_2", idenPubOnChain, + c.HolderTicketPeriod, nil) require.Nil(t, err) // Wait for the events that will get triggered on issuer response nAtempts := 1000 // TODO: go back to 10 atempts @@ -136,8 +142,8 @@ func TestHolderHandlers(t *testing.T) { id1.Stop() id2.Stop() - // err = server.Shutdown(context.Background()) - // require.Nil(t, err) + err = server.Shutdown(context.Background()) + require.Nil(t, err) } func randomBase64String(l int) string { @@ -209,6 +215,8 @@ func TestStressIdentity(t *testing.T) { TimeToPublish: 500 * time.Millisecond, }, idenPubOnChain, + zkFilesIdenState, + zkFilesCredential, ) time.Sleep(200 * time.Millisecond) } @@ -227,7 +235,7 @@ func TestStressIdentity(t *testing.T) { } claimsLen := n * m testStressIdentityWg.Add(claimsLen) - iden, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", c.Web3Url, 400, NewBytesArray(), ha) + iden, err := NewIdentityTest(dir1, sharedDir, "pass_TestHolder_1", idenPubOnChain, 400, NewBytesArray(), ha) require.Nil(t, err) // Request claims @@ -236,7 +244,7 @@ func TestStressIdentity(t *testing.T) { for _j := 0; _j < m; _j++ { j := _j go func() { - t1, err := iden.RequestClaim(fmt.Sprintf("http://127.0.0.1:9%03d/", i), randomBase64String(80)) + t1, err := iden.RequestClaim(fmt.Sprintf("http://127.0.0.1:9%03d/", i), randomBase64String(16)) require.Nil(t, err) log.WithField("TicketId", t1.Id).WithField("i", i).WithField("j", j).Info("--- Request claim ---") mutex.Lock() @@ -266,21 +274,10 @@ func TestStressIdentity(t *testing.T) { wg.Add(1) id := _id go func() { - i := 0 - for ; i < c.VerifierAttempts; i++ { - success1, err := iden.ProveClaim("http://127.0.0.1:9000", id) - if err != nil { - log.Error("Error proving claim: ", err) - } - if success1 { - wg.Done() - break - } - time.Sleep(time.Duration(400 * time.Millisecond)) - } - if i == c.VerifierAttempts { - panic(fmt.Errorf("Reached maximum number of loops for iden.ProveClaim")) - } + success1, err := iden.ProveClaim("http://127.0.0.1:9000", id) + require.Nil(t, err) + require.True(t, success1) + wg.Done() }() if k >= 16 { time.Sleep(200 * time.Millisecond) diff --git a/go/mockupserver/mockupserver.go b/go/mockupserver/mockupserver.go index d9d849c..38b90af 100644 --- a/go/mockupserver/mockupserver.go +++ b/go/mockupserver/mockupserver.go @@ -14,6 +14,7 @@ import ( idenpuboffchainwriterhttp "github.com/iden3/go-iden3-core/components/idenpuboffchain/writerhttp" "github.com/iden3/go-iden3-core/components/idenpubonchain" "github.com/iden3/go-iden3-core/components/verifier" + "github.com/iden3/go-iden3-core/core" "github.com/iden3/go-iden3-core/core/claims" "github.com/iden3/go-iden3-core/db" "github.com/iden3/go-iden3-core/identity/issuer" @@ -71,13 +72,14 @@ func (r *Requests) Approve(id int, claim merkletree.Entrier) error { return nil } -func (r *Requests) Add(value string) int { +func (r *Requests) Add(value, index string) int { r.rw.Lock() defer r.rw.Unlock() r.n += 1 request := messages.Request{ Id: r.n, Value: value, + Index: index, Status: messages.RequestStatusPending, } r.pending[request.Id] = request @@ -96,6 +98,16 @@ func (r *Requests) Get(id int) (*messages.Request, error) { return nil, fmt.Errorf("Request id: %v not found", id) } +func newClaimDemo(id *core.ID, index, value []byte) claims.Claimer { + indexBytes, valueBytes := [claims.IndexSubjectSlotLen]byte{}, [claims.ValueSlotLen]byte{} + if len(index) > 248/8*2 || len(value) > 248/8*3 { + panic("index or value too long") + } + copy(indexBytes[152/8:], index[:]) + copy(valueBytes[216/8:], value[:]) + return claims.NewClaimOtherIden(id, indexBytes, valueBytes) +} + type Conf struct { IP string Port string @@ -104,7 +116,9 @@ type Conf struct { } func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, - idenPubOffChainWrite idenpuboffchain.IdenPubOffChainWriter) *issuer.Issuer { + idenPubOffChainWrite idenpuboffchain.IdenPubOffChainWriter, + zkFilesIdenState *zkutils.ZkFiles, +) *issuer.Issuer { cfg := issuer.ConfigDefault storage := db.NewMemoryStorage() ksStorage := keystore.MemStorage([]byte{}) @@ -119,17 +133,7 @@ func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, require.Nil(t, err) idenStateZkProofConf := &issuer.IdenStateZkProofConf{ Levels: 16, - Files: *zkutils.NewZkFiles( - "http://161.35.72.58:9000/circuit-idstate/", - "/tmp/iden3/idenstatezk", - zkutils.ProvingKeyFormatJSON, - zkutils.ZkFilesHashes{ - ProvingKey: "2c72fceb10323d8b274dbd7649a63c1b6a11fff3a1e4cd7f5ec12516f32ec452", - VerificationKey: "473952ff80aef85403005eb12d1e78a3f66b1cc11e7bd55d6bfe94e0b5577640", - WitnessCalcWASM: "8eafd9314c4d2664a23bf98a4f42cd0c29984960ae3544747ba5fbd60905c41f", - }, - true, - ), + Files: *zkFilesIdenState, } is, err := issuer.Load( storage, @@ -142,13 +146,16 @@ func NewIssuer(t *testing.T, idenPubOnChain idenpubonchain.IdenPubOnChainer, return is } -func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChainer) *http.Server { +func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChainer, + zkFilesIdenState *zkutils.ZkFiles, + zkFilesCredential *zkutils.ZkFiles, +) *http.Server { idenPubOffChainWrite, err := idenpuboffchainwriterhttp.NewIdenPubOffChainWriteHttp( idenpuboffchainwriterhttp.NewConfigDefault(fmt.Sprintf("http://%v:%v/idenpublicdata/", cfg.IP, cfg.Port)), db.NewMemoryStorage(), ) require.Nil(t, err) - is := NewIssuer(t, idenPubOnChain, idenPubOffChainWrite) + is := NewIssuer(t, idenPubOnChain, idenPubOffChainWrite, zkFilesIdenState) requests := NewRequests() verif := verifier.New(idenPubOnChain) @@ -157,7 +164,9 @@ func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChain for { err := is.PublishState() if err != nil { - log.WithError(err).Warn("Issuer.PublishState()") + if err != issuer.ErrIdenStatePendingNotNil { + log.WithError(err).Error("Issuer.PublishState()") + } } err = is.SyncIdenStatePublic() if err != nil { @@ -181,13 +190,14 @@ func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChain if err := ShouldBindJSONValidate(c, &req); err != nil { return } - id := requests.Add(req.Value) + id := requests.Add(req.Index, req.Value) // Approve request and issue claim after c.TimeToAproveClaim duration go func() { time.Sleep(cfg.TimeToAproveClaim) - indexSlot, valueSlot := [claims.IndexSlotLen]byte{}, [claims.ValueSlotLen]byte{} - copy(indexSlot[:], []byte(req.Value)) - claim := claims.NewClaimBasic(indexSlot, valueSlot) + + claim := newClaimDemo(req.HolderID, + append([]byte("Mia kusenveturilo estas plena je angiloj."), []byte(req.Index)...), + []byte(req.Value)) // Issue Claim if err := is.IssueClaim(claim); err != nil { @@ -296,6 +306,31 @@ func Serve(t *testing.T, cfg *Conf, idenPubOnChain idenpubonchain.IdenPubOnChain c.JSON(200, gin.H{}) }) + api.Static("/credentialDemo/artifacts", zkFilesCredential.Path) + + api.POST("/credentialDemo/verifyzkp", func(c *gin.Context) { + + var req verifierMsg.ReqVerifyZkp + if err := c.ShouldBindJSON(&req); err != nil { + handlers.Fail(c, "cannot parse json body", err) + return + } + err := verif.VerifyZkProofCredential( + req.ZkProof, + req.PubSignals, + req.IssuerID, + req.IdenStateBlockN, + zkFilesCredential, + 30*time.Minute, + ) + if err != nil { + handlers.Fail(c, "VerifyZkProofCredential()", err) + return + } + + c.JSON(200, gin.H{}) + }) + server := &http.Server{Addr: fmt.Sprintf("%v:%v", cfg.IP, cfg.Port), Handler: api} go func() { From 46852b14ec20111448176917134c08bfa8196c49 Mon Sep 17 00:00:00 2001 From: Eduard S Date: Wed, 27 May 2020 14:15:31 +0200 Subject: [PATCH 10/10] Increase go test timeout --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 37fe9d6..3801755 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -39,7 +39,7 @@ jobs: run: | cd go/iden3mobile go get -v -t -d ./... - go test -v -count=1 ${{ matrix.flags }} ./... + go test -v -timeout 30m -count=1 ${{ matrix.flags }} ./... goAndroidIntegrationTest: name: Bind Go code to Android and test