func NewGregorMsgID() (gregor1.MsgID, error) { r, err := libkb.RandBytes(16) // TODO: Create a shared function for this. if err != nil { return nil, err } return gregor1.MsgID(r), nil }
func (s *SignupEngine) genPassphraseStream(a libkb.LoginContext, passphrase string) error { salt, err := libkb.RandBytes(triplesec.SaltLen) if err != nil { return err } s.pwsalt = salt s.tsec, s.ppStream, err = libkb.StretchPassphrase(passphrase, salt) if err != nil { return err } return nil }
func TestDeviceAddPhrase(t *testing.T) { // device X (provisioner) context: tcX := SetupEngineTest(t, "kex2provision") defer tcX.Cleanup() // device Y (provisionee) context: tcY := SetupEngineTest(t, "template") defer tcY.Cleanup() // provisioner needs to be logged in userX := CreateAndSignupFakeUser(tcX, "login") var secretX kex2.Secret if _, err := rand.Read(secretX[:]); err != nil { t.Fatal(err) } secretY, err := libkb.NewKex2Secret() if err != nil { t.Fatal(err) } var wg sync.WaitGroup // start provisionee wg.Add(1) go func() { defer wg.Done() f := func(lctx libkb.LoginContext) error { ctx := &Context{ ProvisionUI: &testProvisionUI{secretCh: make(chan kex2.Secret, 1)}, LoginContext: lctx, NetContext: context.TODO(), } deviceID, err := libkb.NewDeviceID() if err != nil { t.Errorf("provisionee device id error: %s", err) return err } suffix, err := libkb.RandBytes(5) if err != nil { t.Errorf("provisionee device suffix error: %s", err) return err } dname := fmt.Sprintf("device_%x", suffix) device := &libkb.Device{ ID: deviceID, Description: &dname, Type: libkb.DeviceTypeDesktop, } provisionee := NewKex2Provisionee(tcY.G, device, secretY.Secret()) if err := RunEngine(provisionee, ctx); err != nil { t.Errorf("provisionee error: %s", err) return err } return nil } if err := tcY.G.LoginState().ExternalFunc(f, "Test - DeviceAdd"); err != nil { t.Errorf("kex2 provisionee error: %s", err) } }() // run DeviceAdd engine on device X ctx := &Context{ SecretUI: userX.NewSecretUI(), ProvisionUI: &testPhraseProvisionUI{phrase: secretY.Phrase()}, NetContext: context.TODO(), } eng := NewDeviceAdd(tcX.G) if err := RunEngine(eng, ctx); err != nil { t.Errorf("device add error: %s", err) } wg.Wait() }
func TestKex2Provision(t *testing.T) { // device X (provisioner) context: tcX := SetupEngineTest(t, "kex2provision") defer tcX.Cleanup() // provisioner needs to be logged in userX := CreateAndSignupFakeUser(tcX, "login") // device Y (provisionee) context: tcY := SetupEngineTest(t, "kex2provision") defer tcY.Cleanup() var secretX kex2.Secret if _, err := rand.Read(secretX[:]); err != nil { t.Fatal(err) } var secretY kex2.Secret if _, err := rand.Read(secretY[:]); err != nil { t.Fatal(err) } var wg sync.WaitGroup // start provisionee wg.Add(1) go func() { defer wg.Done() ctx := &Context{ ProvisionUI: &testProvisionUI{secretCh: make(chan kex2.Secret, 1)}, } deviceID, err := libkb.NewDeviceID() if err != nil { t.Errorf("provisionee device id error: %s", err) return } suffix, err := libkb.RandBytes(5) if err != nil { t.Errorf("provisionee device suffix error: %s", err) return } dname := fmt.Sprintf("device_%x", suffix) device := &libkb.Device{ ID: deviceID, Description: &dname, Type: libkb.DeviceTypeDesktop, } provisionee := NewKex2Provisionee(tcY.G, device, secretY) if err := RunEngine(provisionee, ctx); err != nil { t.Errorf("provisionee error: %s", err) return } }() // start provisioner wg.Add(1) go func() { defer wg.Done() ctx := &Context{ SecretUI: userX.NewSecretUI(), ProvisionUI: &testProvisionUI{}, } provisioner := NewKex2Provisioner(tcX.G, secretX) go provisioner.AddSecret(secretY) if err := RunEngine(provisioner, ctx); err != nil { t.Errorf("provisioner error: %s", err) return } }() wg.Wait() }