diff --git a/fileTransfer/manager_test.go b/fileTransfer/manager_test.go index b5951adaf07633ed26a95c9a844a5ee70a01b64c..c1133aa32a8f0f0e2fa09139678cdfd224e44fa2 100644 --- a/fileTransfer/manager_test.go +++ b/fileTransfer/manager_test.go @@ -84,6 +84,19 @@ func TestManager_Send(t *testing.T) { retry := float32(1.5) numFps := calcNumberOfFingerprints(numParts, retry) + rng := csprng.NewSystemRNG() + dhKey := m.store.E2e().GetGroup().NewInt(42) + pubKey := diffieHellman.GeneratePublicKey(dhKey, m.store.E2e().GetGroup()) + _, mySidhPriv := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhA, rng) + theirSidhPub, _ := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhB, rng) + p := params.GetDefaultE2ESessionParams() + + err := m.store.E2e().AddPartner(recipient, pubKey, dhKey, + mySidhPriv, theirSidhPub, p, p) + if err != nil { + t.Errorf("Failed to add partner %s: %+v", recipient, err) + } + tid, err := m.Send( fileName, fileType, fileData, recipient, retry, preview, nil, 0) if err != nil { @@ -244,9 +257,22 @@ func TestManager_Send_SendE2eError(t *testing.T) { preview := []byte("filePreview") retry := float32(1.5) + rng := csprng.NewSystemRNG() + dhKey := m.store.E2e().GetGroup().NewInt(42) + pubKey := diffieHellman.GeneratePublicKey(dhKey, m.store.E2e().GetGroup()) + _, mySidhPriv := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhA, rng) + theirSidhPub, _ := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhB, rng) + p := params.GetDefaultE2ESessionParams() + + err := m.store.E2e().AddPartner(recipient, pubKey, dhKey, + mySidhPriv, theirSidhPub, p, p) + if err != nil { + t.Errorf("Failed to add partner %s: %+v", recipient, err) + } + expectedErr := fmt.Sprintf(newFtSendE2eErr, recipient, "") - _, err := m.Send( + _, err = m.Send( fileName, fileType, fileData, recipient, retry, preview, nil, 0) if err == nil || !strings.Contains(err.Error(), expectedErr) { t.Errorf("Send did not return the expected error when the E2E message "+ diff --git a/fileTransfer/sendNew.go b/fileTransfer/sendNew.go index e78b7f9c4f49ee96b55abf550e46083bf06dc2b6..99a935b737a6d0cfff495cc4e458ab1314fd3414 100644 --- a/fileTransfer/sendNew.go +++ b/fileTransfer/sendNew.go @@ -34,8 +34,18 @@ func (m *Manager) sendNewFileTransfer(recipient *id.ID, fileName, return errors.Errorf(newFtProtoMarshalErr, err) } + // Get partner relationship so that the silent preimage can be generated + relationship, err := m.store.E2e().GetPartner(recipient) + if err != nil { + return err + } + + // Sends as a silent message to avoid a notification + p := params.GetDefaultE2E() + p.CMIX.IdentityPreimage = relationship.GetSilentPreimage() + // Send E2E message - rounds, _, _, err := m.net.SendE2E(sendMsg, params.GetDefaultE2E(), nil) + rounds, _, _, err := m.net.SendE2E(sendMsg, p, nil) if err != nil && len(rounds) == 0 { return errors.Errorf(newFtSendE2eErr, recipient, err) } diff --git a/fileTransfer/sendNew_test.go b/fileTransfer/sendNew_test.go index 6465f359c41ce50b65781729777e5be3b6b3d6cc..8a4da00a6d666001813c728311496ba39fcf9a1b 100644 --- a/fileTransfer/sendNew_test.go +++ b/fileTransfer/sendNew_test.go @@ -9,9 +9,14 @@ package fileTransfer import ( "fmt" + "github.com/cloudflare/circl/dh/sidh" "github.com/golang/protobuf/proto" "gitlab.com/elixxir/client/interfaces/message" + "gitlab.com/elixxir/client/interfaces/params" + util "gitlab.com/elixxir/client/storage/utility" + "gitlab.com/elixxir/crypto/diffieHellman" ftCrypto "gitlab.com/elixxir/crypto/fileTransfer" + "gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/primitives/id" "reflect" "strings" @@ -31,6 +36,19 @@ func TestManager_sendNewFileTransfer(t *testing.T) { numParts, fileSize, retry := uint16(16), uint32(256), float32(1.5) preview := []byte("filePreview") + rng := csprng.NewSystemRNG() + dhKey := m.store.E2e().GetGroup().NewInt(42) + pubKey := diffieHellman.GeneratePublicKey(dhKey, m.store.E2e().GetGroup()) + _, mySidhPriv := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhA, rng) + theirSidhPub, _ := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhB, rng) + p := params.GetDefaultE2ESessionParams() + + err := m.store.E2e().AddPartner(recipient, pubKey, dhKey, + mySidhPriv, theirSidhPub, p, p) + if err != nil { + t.Errorf("Failed to add partner %s: %+v", recipient, err) + } + expected, err := newNewFileTransferE2eMessage(recipient, fileName, fileType, key, mac, numParts, fileSize, retry, preview) if err != nil { @@ -60,8 +78,21 @@ func TestManager_sendNewFileTransfer_E2eError(t *testing.T) { recipient := id.NewIdFromString("recipient", id.User, t) key, _ := ftCrypto.NewTransferKey(NewPrng(42)) + rng := csprng.NewSystemRNG() + dhKey := m.store.E2e().GetGroup().NewInt(42) + pubKey := diffieHellman.GeneratePublicKey(dhKey, m.store.E2e().GetGroup()) + _, mySidhPriv := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhA, rng) + theirSidhPub, _ := util.GenerateSIDHKeyPair(sidh.KeyVariantSidhB, rng) + p := params.GetDefaultE2ESessionParams() + + err := m.store.E2e().AddPartner(recipient, pubKey, dhKey, + mySidhPriv, theirSidhPub, p, p) + if err != nil { + t.Errorf("Failed to add partner %s: %+v", recipient, err) + } + expectedErr := fmt.Sprintf(newFtSendE2eErr, recipient, "") - err := m.sendNewFileTransfer(recipient, "", "", key, nil, 16, 256, 1.5, nil) + err = m.sendNewFileTransfer(recipient, "", "", key, nil, 16, 256, 1.5, nil) if err == nil || !strings.Contains(err.Error(), expectedErr) { t.Errorf("sendNewFileTransfer di dnot return the expected error when "+ "SendE2E failed.\nexpected: %s\nreceived: %+v", expectedErr, err)