Skip to content
Snippets Groups Projects
Commit e3cf8ac9 authored by Jake Taylor's avatar Jake Taylor :lips:
Browse files

Merge branch 'josh/RemoveBadRand' into 'release'

Remove bad rand.Reader usage in ud/

See merge request !241
parents b2d8e080 6daf43d1
Branches
Tags
2 merge requests!510Release,!241Remove bad rand.Reader usage in ud/
......@@ -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(),
......
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
}
......
......@@ -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,7 +230,7 @@ func LoadManager(services CMix, e2e E2E,
events: events,
comms: comms,
user: userStore,
rng: rng,
kv: kv,
}
......
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
}
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment