diff --git a/cmd/ud.go b/cmd/ud.go index 9f8d84835d37b16dd14c8d09c09e17ba54f97b3d..44d159684a40756dcc724c88b1a17b94c7ed9b65 100644 --- a/cmd/ud.go +++ b/cmd/ud.go @@ -78,21 +78,21 @@ var udCmd = &cobra.Command{ waitUntilConnected(connected) // Make user discovery manager - stream := client.GetRng().GetStream() - defer stream.Close() + rng := client.GetRng() userToRegister := viper.GetString("register") userDiscoveryMgr, err := ud.NewManager(client.GetCmix(), client.GetE2E(), client.NetworkFollowerStatus, client.GetEventReporter(), client.GetComms(), client.GetStorage(), - stream, + rng, userToRegister, client.GetStorage().GetKV()) if err != nil { if strings.Contains(err.Error(), ud.IsRegisteredErr) { userDiscoveryMgr, err = ud.LoadManager(client.GetCmix(), client.GetE2E(), client.GetEventReporter(), client.GetComms(), - client.GetStorage(), client.GetStorage().GetKV()) + client.GetStorage(), client.GetRng(), + client.GetStorage().GetKV()) if err != nil { jww.FATAL.Panicf("Failed to load UD manager: %+v", err) } @@ -163,12 +163,15 @@ var udCmd = &cobra.Command{ } printContact(newContact) } + + stream := rng.GetStream() _, _, err = ud.Lookup(client.GetCmix(), stream, client.GetE2E().GetGroup(), udContact, cb, lookupID, single.GetDefaultRequestParams()) if err != nil { jww.WARN.Printf("Failed UD lookup: %+v", err) } + stream.Close() time.Sleep(31 * time.Second) } @@ -256,6 +259,8 @@ var udCmd = &cobra.Command{ } } + stream := rng.GetStream() + defer stream.Close() _, _, err = ud.Search(client.GetCmix(), client.GetEventReporter(), stream, client.GetE2E().GetGroup(), diff --git a/ud/addFact.go b/ud/addFact.go index 6412e94b308871e9aa7266b2176e39cb8f169376..3c2b0af5428d71c57fd5f80cc3a0b5657bc9cccc 100644 --- a/ud/addFact.go +++ b/ud/addFact.go @@ -1,7 +1,6 @@ package ud import ( - "crypto/rand" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" pb "gitlab.com/elixxir/comms/mixmessages" @@ -47,7 +46,9 @@ func (m *Manager) addFact(inFact fact.Fact, myId *id.ID, // Sign our inFact for putting into the request privKey := m.user.PortableUserInfo().ReceptionRSA - fSig, err := rsa.Sign(rand.Reader, privKey, hash.CMixHash, fHash, nil) + stream := m.rng.GetStream() + defer stream.Close() + fSig, err := rsa.Sign(stream, privKey, hash.CMixHash, fHash, nil) if err != nil { return "", err } diff --git a/ud/manager.go b/ud/manager.go index 1ce22eac8d6c24812c381fdc60753e07ba5e5e66..77dbc01f44def0d37e0d84ff208fb8cffe39befe 100644 --- a/ud/manager.go +++ b/ud/manager.go @@ -2,6 +2,7 @@ package ud import ( "fmt" + "gitlab.com/elixxir/crypto/fastRNG" "sync" "time" @@ -14,7 +15,6 @@ import ( "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/primitives/fact" "gitlab.com/xx_network/comms/connect" - "gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/primitives/id" ) @@ -65,6 +65,10 @@ type Manager struct { // alternativeUd is an alternate User discovery service to circumvent // production. This is for testing with a separately deployed UD service. alternativeUd *alternateUd + + // rng is a fastRNG.StreamGenerator which is used to generate random + // data. This is used for signatures for adding/removing facts. + rng *fastRNG.StreamGenerator } // NewManager builds a new user discovery manager. @@ -73,7 +77,7 @@ type Manager struct { func NewManager(services CMix, e2e E2E, follower NetworkStatus, events event.Reporter, comms Comms, userStore UserInfo, - rng csprng.Source, username string, + rng *fastRNG.StreamGenerator, username string, kv *versioned.KV) (*Manager, error) { jww.INFO.Println("ud.NewManager()") @@ -90,6 +94,7 @@ func NewManager(services CMix, e2e E2E, comms: comms, user: userStore, kv: kv, + rng: rng, } if m.isRegistered() { @@ -111,7 +116,9 @@ func NewManager(services CMix, e2e E2E, } // Register with user discovery - err = m.register(username, rng, comms, udHost) + stream := rng.GetStream() + defer stream.Close() + err = m.register(username, stream, comms, udHost) if err != nil { return nil, errors.Errorf("Failed to register: %v", err) } @@ -132,6 +139,7 @@ func NewManager(services CMix, e2e E2E, func NewManagerFromBackup(services CMix, e2e E2E, follower NetworkStatus, events event.Reporter, comms Comms, userStore UserInfo, + rng *fastRNG.StreamGenerator, email, phone fact.Fact, kv *versioned.KV) (*Manager, error) { jww.INFO.Println("ud.NewManagerFromBackup()") if follower() != xxdk.Running { @@ -148,6 +156,7 @@ func NewManagerFromBackup(services CMix, comms: comms, user: userStore, kv: kv, + rng: rng, } // Initialize our store @@ -212,6 +221,7 @@ func InitStoreFromBackup(kv *versioned.KV, // instantiation of the manager by NewUserDiscovery. func LoadManager(services CMix, e2e E2E, events event.Reporter, comms Comms, userStore UserInfo, + rng *fastRNG.StreamGenerator, kv *versioned.KV) (*Manager, error) { m := &Manager{ @@ -220,8 +230,8 @@ func LoadManager(services CMix, e2e E2E, events: events, comms: comms, user: userStore, - - kv: kv, + rng: rng, + kv: kv, } if !m.isRegistered() { diff --git a/ud/remove.go b/ud/remove.go index 61d130ec240ad1bda693af3c39c9660f7858f597..b64a218e6d54f120de999478ef8b9fd5fb10dd0c 100644 --- a/ud/remove.go +++ b/ud/remove.go @@ -1,7 +1,6 @@ package ud import ( - "crypto/rand" "fmt" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" @@ -47,7 +46,9 @@ func (m *Manager) removeFact(f fact.Fact, // Sign our inFact for putting into the request privKey := m.user.PortableUserInfo().ReceptionRSA - fSig, err := rsa.Sign(rand.Reader, privKey, hash.CMixHash, fHash, nil) + stream := m.rng.GetStream() + defer stream.Close() + fSig, err := rsa.Sign(stream, privKey, hash.CMixHash, fHash, nil) if err != nil { return err } @@ -103,7 +104,9 @@ func (m *Manager) permanentDeleteAccount(f fact.Fact, myId *id.ID, privateKey *r fHash := factID.Fingerprint(f) // Sign our inFact for putting into the request - fsig, err := rsa.Sign(rand.Reader, privateKey, hash.CMixHash, fHash, nil) + stream := m.rng.GetStream() + defer stream.Close() + fsig, err := rsa.Sign(stream, privateKey, hash.CMixHash, fHash, nil) if err != nil { return err } diff --git a/ud/utils_test.go b/ud/utils_test.go index 640c62ec048b356c66319a15e3e08f3ae187ff61..5124db19cd73f3b153afde487c4649a2276780ff 100644 --- a/ud/utils_test.go +++ b/ud/utils_test.go @@ -24,6 +24,7 @@ import ( "gitlab.com/elixxir/comms/testkeys" "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/cyclic" + "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/ekv" "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/comms/messages" @@ -69,6 +70,8 @@ func newTestManager(t *testing.T) (*Manager, *testNetworkManager) { t.Fatalf("Failed to initialize store %v", err) } + rngGen := fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG) + // Create our Manager object m := &Manager{ e2e: mockE2e{grp: getGroup()}, @@ -76,6 +79,7 @@ func newTestManager(t *testing.T) (*Manager, *testNetworkManager) { user: mockUser{testing: t, key: key}, store: udStore, comms: &mockComms{}, + rng: rngGen, kv: kv, } tnm := newTestNetworkManager(t)