Skip to content

Commit

Permalink
feat(p2p): Add private network
Browse files Browse the repository at this point in the history
  • Loading branch information
gfanton committed Nov 20, 2018
1 parent 5b860df commit 0917e4a
Show file tree
Hide file tree
Showing 8 changed files with 183 additions and 21 deletions.
12 changes: 11 additions & 1 deletion client/react-native/gomobile/core/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package core

import (
"encoding/json"
"io"
"strings"

account "berty.tech/core/manager/account"
"berty.tech/core/network/p2p"
Expand All @@ -11,8 +13,8 @@ import (
type networkConfig struct {
DefaultTransport bool
BluetoothTransport bool
DefaultBootstrap bool
IPFSBootstrap bool
DefaultBootstrap bool
CustomBootstrap []string
MDNS bool
Relay bool
Expand All @@ -25,6 +27,7 @@ func createNetworkConfig() (*account.P2PNetworkOptions, error) {
bind []string
transport []string
bootstrap []string
swarmKey io.Reader
)

if err := json.Unmarshal([]byte(appConfig.JSONNetConf), &netConf); err != nil {
Expand All @@ -42,9 +45,15 @@ func createNetworkConfig() (*account.P2PNetworkOptions, error) {
if netConf.DefaultBootstrap {
bootstrap = append(bootstrap, p2p.DefaultBootstrap...)
}

// If ipfs is disable protect swarm with a default key, this will avoid to
// spread ipfs nodes over our network
if netConf.IPFSBootstrap {
bootstrap = append(bootstrap, p2p.BootstrapIpfs...)
} else {
swarmKey = strings.NewReader(p2p.DefaultSwarmKey)
}

bootstrap = append(bootstrap, netConf.CustomBootstrap...)

return &account.P2PNetworkOptions{
Expand All @@ -55,6 +64,7 @@ func createNetworkConfig() (*account.P2PNetworkOptions, error) {
Relay: netConf.Relay,
Metrics: defaultMetrics,
Identity: defaultIdentity,
SwarmKey: swarmKey,
}, nil
}

Expand Down
24 changes: 24 additions & 0 deletions client/react-native/gomobile/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ github.com/99designs/gqlgen v0.6.0 h1:gg+WRRW2A+XldwDRcwkgBh0wffvyZlcQX8WUu+4rKd
github.com/99designs/gqlgen v0.6.0/go.mod h1:KSQDfLlTTGmzlRgLGm6HeKKKo598l5E2svEM6Nz2Jnw=
github.com/99designs/gqlgen v0.6.0/go.mod h1:p6RS1iWLR+HVU1U2lU6vWgLjXSBtD0hRubzDWKhXFhY=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Yawning/chacha20 v0.0.0-20170904085104-e3b1f968fc63/go.mod h1:nf+Komq6fVP4SwmKEaVGxHTyQGKREVlwjQKpvOV39yE=
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI=
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0=
github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/aristanetworks/goarista v0.0.0-20181109020153-5faa74ffbed7/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ=
github.com/brianvoe/gofakeit v3.12.1+incompatible h1:m8qs7wYNmQnWAGKVmyRsRH36hyI4teHq2khpAuy1424=
github.com/brianvoe/gofakeit v3.12.1+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc=
github.com/brianvoe/gofakeit v3.13.0+incompatible h1:OscAXOIT40Xp4qY/VBxyRVsvp1Jv7i0fyBnXdJmI9cI=
Expand All @@ -31,6 +33,8 @@ github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazu
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0=
github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4=
github.com/denisenkom/go-mssqldb v0.0.0-20180901172138-1eb28afdf9b6 h1:BZGp1dbKFjqlGmxEpwkDpCWNxVwEYnUPoncIzLiHlPo=
github.com/denisenkom/go-mssqldb v0.0.0-20180901172138-1eb28afdf9b6/go.mod h1:xN/JuLBIz4bjkxNmByTiV1IbhfnYb6oo99phBn4Eqhc=
github.com/denisenkom/go-mssqldb v0.0.0-20181014144952-4e0d7dc8888f/go.mod h1:xN/JuLBIz4bjkxNmByTiV1IbhfnYb6oo99phBn4Eqhc=
Expand All @@ -40,11 +44,21 @@ github.com/fd/go-nat v1.0.0 h1:DPyQ97sxA9ThrWYRPcWUz/z9TnpTIGRYODIQc/dy64M=
github.com/fd/go-nat v1.0.0/go.mod h1:BTBu/CKvMmOMUPkKVef1pngt2WFH/lg7E6yQnulfp6E=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/getlantern/context v0.0.0-20181106182922-539649cc3118/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY=
github.com/getlantern/ema v0.0.0-20180718025023-42474605965c/go.mod h1:tzRwT19aDrWSr6yRDs8iOvaXXCau96EgWsgGT9wIpoQ=
github.com/getlantern/errors v0.0.0-20180829142810-e24b7f4ff7c7/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A=
github.com/getlantern/golog v0.0.0-20170508214112-cca714f7feb5/go.mod h1:Vwx1Cg64gCdIalad44uvQsKZw6LsVczIKZrUBStEjVw=
github.com/getlantern/hex v0.0.0-20160523043825-083fba3033ad/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o=
github.com/getlantern/hidden v0.0.0-20160523043807-d52a649ab33a/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/lampshade v0.0.0-20181026012137-44db2076fd5b/go.mod h1:h0JxtfSix7rXr+2dnLTmUV2rApjQH364hfM5YLAFXYc=
github.com/getlantern/mtime v0.0.0-20170117193331-ba114e4a82b0/go.mod h1:u537FS7ld4Whf7h7/0ql/myAudWWBNgeRhgE9XXH4Pk=
github.com/getlantern/ops v0.0.0-20170904182230-37353306c908/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
github.com/go-gormigrate/gormigrate v1.2.1 h1:y3jmLDVVxVkuIR4CR5Qu+lLiUUOtpGt+4zjkLH53Bls=
github.com/go-gormigrate/gormigrate v1.2.1/go.mod h1:EmaYTk8H9TxcUD9nFzNPaHlDUCePc1EstS+HTwcGNhE=
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
Expand Down Expand Up @@ -142,6 +156,7 @@ github.com/libp2p/go-conn-security v0.1.13 h1:L9bvgY1oTXHwZhL6xUP/BvZYuabg80dEQh
github.com/libp2p/go-conn-security v0.1.13/go.mod h1:lIqm8x2wrAxlG+6CzJ3z4Nk5/F73zdjkS6RKbHSbaJ4=
github.com/libp2p/go-conn-security-multistream v0.1.13 h1:NjEXpXou7jYFxj6NoDxe1Qos/5zXm3eluBfREBIGZKQ=
github.com/libp2p/go-conn-security-multistream v0.1.13/go.mod h1:hBY3HYjGnK86P3pX3wgr9IAfe3A/vZB830LJAMi1g88=
github.com/libp2p/go-floodsub v0.10.2/go.mod h1:nfCSvCW4ySBAVDvZoy4B3QbNalFd5Wu0IOvMzEVuUrk=
github.com/libp2p/go-flow-metrics v0.2.0 h1:GAJSg/g+xLuc7vz0RN96pRA9q/n5b5+Hs6SndagmOR4=
github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8=
github.com/libp2p/go-libp2p v6.0.9+incompatible h1:lesosUJ4uJsd9VFmDy6OPHj4nAIn0ncr4aYIdNVtYsM=
Expand Down Expand Up @@ -186,8 +201,11 @@ github.com/libp2p/go-libp2p-peerstore v1.4.23 h1:CuajEFwUrSOT8YMAGJy++4+bNgjtEPY
github.com/libp2p/go-libp2p-peerstore v1.4.23/go.mod h1:lLfgn0N3z2t+ER57a88K7NTZjMO27ez5TyWSURd428E=
github.com/libp2p/go-libp2p-peerstore v2.0.4+incompatible h1:4dOjYQ/y38mBw9m9/pcAGSv+5PxK4dS37cEOSsaF7zo=
github.com/libp2p/go-libp2p-peerstore v2.0.4+incompatible/go.mod h1:lLfgn0N3z2t+ER57a88K7NTZjMO27ez5TyWSURd428E=
github.com/libp2p/go-libp2p-pnet v3.0.4+incompatible h1:+jY7/4M41k86g0E/ctEmabLdQeXGrwl+8ZxDK16Nt88=
github.com/libp2p/go-libp2p-pnet v3.0.4+incompatible/go.mod h1:S0NLmMHBDsJsTz4TC0g+5iy81d+5xrtJbrDnz6+UroU=
github.com/libp2p/go-libp2p-protocol v1.0.0 h1:6AnF76m2VjjiaDisOahQnWSnX2WWaISOXC7q9/YJIrM=
github.com/libp2p/go-libp2p-protocol v1.0.0/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
github.com/libp2p/go-libp2p-pubsub v0.10.2/go.mod h1:E2KoEMwM5nWtdGV+wWueN7g/j++VL9tmCfjzk1fLpWc=
github.com/libp2p/go-libp2p-record v4.1.5+incompatible h1:x4WDrluwOZROh2+GLKes4RrrjY5MI5q30M2CosP5BxQ=
github.com/libp2p/go-libp2p-record v4.1.5+incompatible/go.mod h1:fsxr7H89UzzL4pG23Aq2n/5aNAXxdGEbyBVepo8oXy8=
github.com/libp2p/go-libp2p-record v4.1.7+incompatible h1:SDxar7iuh4z03b85lr8tVMSKNWWK73RLkQKyPwcxIeo=
Expand Down Expand Up @@ -253,6 +271,8 @@ github.com/multiformats/go-multiaddr-net v1.6.3 h1:Who/zy46KcaQjgGqT8hXEtBHnWAWH
github.com/multiformats/go-multiaddr-net v1.6.3/go.mod h1:AO4WqKzxLt+paJ0N0kufj6teQ2R6fZbnItDvGTwilmk=
github.com/multiformats/go-multibase v0.3.0 h1:KWPXEW0HCkqUHO7XZsoo0jwephTxh9roPT5fro7q0sw=
github.com/multiformats/go-multibase v0.3.0/go.mod h1:RUrDbdRB1mQ1K/3PAh7h7+6NliRK10PA5joM8V0IYLI=
github.com/multiformats/go-multicodec v0.1.6 h1:4u6lcjbE4VVVoigU4QJSSVYsGVP4j2jtDkR8lPwOrLE=
github.com/multiformats/go-multicodec v0.1.6/go.mod h1:lliaRHbcG8q33yf4Ot9BGD7JqR/Za9HE7HTyVyKwrUQ=
github.com/multiformats/go-multihash v1.0.8 h1:pyowaBSivNxBr137ZjYkr0q4o41MKSJVPKuO7F7AAfY=
github.com/multiformats/go-multihash v1.0.8/go.mod h1:sT17phG+xVgnrZc8ht/ZoCIV0sKRwvmZkXk46UfSxM4=
github.com/multiformats/go-multistream v0.3.9 h1:ZqVaUxtVzjRUCGaO3596vk/rj9UXheIGAdKXXo/VKUA=
Expand All @@ -263,6 +283,7 @@ github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I=
github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
Expand Down Expand Up @@ -303,6 +324,8 @@ github.com/vektah/gqlparser v0.0.0-20181002002754-f119686bf1d4 h1:HOJJtIE3gsOqjN
github.com/vektah/gqlparser v0.0.0-20181002002754-f119686bf1d4/go.mod h1:K4QdSSpS2XiHHwzb18kWh3iBljB8rLC8okGXsnQy3Nc=
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4=
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM=
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0=
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ=
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k=
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 h1:9lDbC6Rz4bwmou+oE6Dt4Cb2BGMur5eR/GYptkKUVHo=
Expand All @@ -323,6 +346,7 @@ github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30 h1:nMCC9Pwz1pxf
github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4=
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds=
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI=
github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg=
github.com/whyrusleeping/yamux v1.1.2 h1:oGpjhLpa0mZnRMbthCkEe+61VvkQGFSkQgm9WvaHgRU=
github.com/whyrusleeping/yamux v1.1.2/go.mod h1:E8LnQQ8HKx5KD29HZFUwM1PxCOdPRzGwur1mcYhXcD8=
github.com/xeodou/go-sqlcipher v0.0.0-20180523161204-7f9cd319987f h1:+G16VLt+1NlrpOg/1ECvQybMsI0mnYz4OOQwXit5QzI=
Expand Down
41 changes: 33 additions & 8 deletions core/cmd/berty/daemon.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
package main

import (
"bufio"
"fmt"
"io"
"os"
"strings"

"berty.tech/core/manager/account"
"berty.tech/core/network/p2p"
"github.com/spf13/cobra"
Expand All @@ -19,13 +25,15 @@ type daemonOptions struct {
withBot bool `mapstructure:"with-bot"`

// p2p
identity string `mapstructure:"identity"`
bootstrap []string `mapstructure:"bootstrap"`
noP2P bool `mapstructure:"no-p2p"`
bindP2P []string `mapstructure:"bind-p2p"`
transportP2P []string `mapstructure:"transport-p2p"`
hop bool `mapstructure:"hop"` // relay hop
mdns bool `mapstructure:"mdns"`
identity string `mapstructure:"identity"`
bootstrap []string `mapstructure:"bootstrap"`
noP2P bool `mapstructure:"no-p2p"`
bindP2P []string `mapstructure:"bind-p2p"`
transportP2P []string `mapstructure:"transport-p2p"`
hop bool `mapstructure:"hop"` // relay hop
mdns bool `mapstructure:"mdns"`
PrivateNetwork bool `mapstructure:"private-network"`
SwarmKeyPath string `mapstructure:"swarm-key"`

nickname string `mapstructure:"nickname"`
password string `mapstructure:"password"`
Expand All @@ -41,6 +49,8 @@ func daemonSetupFlags(flags *pflag.FlagSet, opts *daemonOptions) {
flags.BoolVar(&opts.hop, "hop", false, "enable relay hop (should not be enable for client)")
flags.BoolVar(&opts.withBot, "bot", false, "enable bot")
flags.BoolVar(&opts.mdns, "mdns", true, "enable mdns discovery")
flags.BoolVar(&opts.PrivateNetwork, "private-network", true, "enable private network with the default swarm key")
flags.StringVar(&opts.SwarmKeyPath, "swarm-key", "", "path to a custom swarm key, only peers that use the same swarm key will be able to talk with you")
flags.StringVar(&opts.grpcBind, "grpc-bind", ":1337", "gRPC listening address")
flags.StringVar(&opts.gqlBind, "gql-bind", ":8700", "Bind graphql api")
flags.StringVarP(&opts.identity, "p2p-identity", "i", "", "set p2p identity")
Expand Down Expand Up @@ -72,7 +82,6 @@ func newDaemonCommand() *cobra.Command {
}

func daemon(opts *daemonOptions) error {

var err error
a := &account.Account{}

Expand All @@ -99,6 +108,21 @@ func daemon(opts *daemonOptions) error {
}),
}
if !opts.noP2P {
var swarmKey io.Reader

if opts.PrivateNetwork {
swarmKey = strings.NewReader(p2p.DefaultSwarmKey)
}

if opts.SwarmKeyPath != "" {
file, err := os.Open(opts.SwarmKeyPath)
if err != nil {
return fmt.Errorf("swarm key error: %s", err)
}

swarmKey = bufio.NewReader(file)
}

accountOptions = append(accountOptions, account.WithP2PNetwork(
&account.P2PNetworkOptions{
Bind: opts.bindP2P,
Expand All @@ -108,6 +132,7 @@ func daemon(opts *daemonOptions) error {
Relay: opts.hop,
Metrics: true,
Identity: opts.identity,
SwarmKey: swarmKey,
},
))
} else {
Expand Down
33 changes: 26 additions & 7 deletions core/cmd/berty/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"crypto/rand"
"encoding/base64"
"encoding/hex"
"fmt"
"os"

Expand Down Expand Up @@ -54,6 +55,7 @@ func newIdentityCommand() *cobra.Command {
cryptoKeyGenerateCmd.Flags().BoolVar(&cfgCryptoRaw, "bytes", false, "Print raw key")
cryptoKeyGenerateCmd.Flags().StringVar(&cfgCryptoKeyType, "key-type", "RSA", "Key types, can be: `RSA`, `Ed25519` or `Secp256k1` ")
cryptoCmd.AddCommand(cryptoKeyGenerateCmd)
cryptoCmd.AddCommand(cryptoSwarmKey)
return cryptoCmd
}

Expand All @@ -70,47 +72,64 @@ var cryptoCmd = &cobra.Command{
Short: "identity related cmds",
}

var cryptoSwarmKey = &cobra.Command{
Use: "swarm-key",
Short: "Generate a swarm key",
Run: func(cmd *cobra.Command, args []string) {
key := make([]byte, 32)
_, err := rand.Read(key)
if err != nil {
logger().Fatal("While trying to read random source", zap.Error(err))
}

fmt.Println("/key/swarm/psk/1.0.0/")
fmt.Println("/base16/")
fmt.Print(hex.EncodeToString(key))
},
}

var cryptoKeyGenerateCmd = &cobra.Command{
Use: "generate",
Short: "keys related tools",
Run: func(cmd *cobra.Command, args []string) {
// @TODO: handle file output
w := os.Stdout
defer w.Close()

t, err := getKeyType(cfgCryptoKeyType)
if err != nil {
zap.L().Fatal("cannot get key type:", zap.String("type", cfgCryptoKeyType), zap.Error(err))
logger().Fatal("cannot get key type:", zap.String("type", cfgCryptoKeyType), zap.Error(err))
}

priv, pub, err := p2pcrypto.GenerateKeyPairWithReader(int(t), 2048, r)
if err != nil {
zap.L().Fatal("error while generating key pair", zap.Error(err))
logger().Fatal("error while generating key pair", zap.Error(err))
}

bPriv, err := priv.Bytes()
if err != nil {
zap.L().Fatal("invalid private key", zap.Error(err))
logger().Fatal("invalid private key", zap.Error(err))
}

var bPub []byte = []byte{}
if cfgCryptoPubKey {
bPub, err = pub.Bytes()
if err != nil {
zap.L().Fatal("invalid private key", zap.Error(err))
logger().Fatal("invalid private key", zap.Error(err))
}
}

if cfgCryptoRaw {
if cfgCryptoPubKey {
if _, err = w.Write(bPub); err != nil {
zap.L().Fatal("error while writing output", zap.Error(err))
logger().Fatal("error while writing output", zap.Error(err))
}

return
}

if _, err := w.Write(bPriv); err != nil {
zap.L().Fatal("error while writing output", zap.Error(err))
logger().Fatal("error while writing output", zap.Error(err))
}

return
Expand All @@ -122,7 +141,7 @@ var cryptoKeyGenerateCmd = &cobra.Command{
}

if err != nil {
zap.L().Fatal("error while writing output", zap.Error(err))
logger().Fatal("error while writing output", zap.Error(err))
}
},
}
Loading

0 comments on commit 0917e4a

Please sign in to comment.