diff --git a/fileTransfer/send_test.go b/fileTransfer/send_test.go index 29a0e0853e26db79e0042a7f0296cb2a39ea439a..f63ebbac224ce3ebd90e074444db3b89c8163232 100644 --- a/fileTransfer/send_test.go +++ b/fileTransfer/send_test.go @@ -668,7 +668,7 @@ func TestManager_newCmixMessage(t *testing.T) { } decrPart, err := ftCrypto.DecryptPart(key, partMsg.GetPart(), - partMsg.getNonce(), cmixMsg.GetMac(), partMsg.GetPartNum()) + cmixMsg.GetMac(), partMsg.GetPartNum(),cmixMsg.GetKeyFP()) if err != nil { t.Errorf("Failed to decrypt file part: %+v", err) } @@ -1006,7 +1006,7 @@ func TestManager_getPartSize(t *testing.T) { // Calculate the expected part size primeByteLen := m.store.Cmix().GetGroup().GetP().ByteLen() cmixMsgUsedLen := format.AssociatedDataSize - filePartMsgUsedLen := ftStorage.fmMinSize + filePartMsgUsedLen := ftStorage.FmMinSize expected := 2*primeByteLen - cmixMsgUsedLen - filePartMsgUsedLen-1 // Get the part size diff --git a/go.mod b/go.mod index d66dd9d3ef9b9b602c4470501c236dee00fa4160..9d46000c2b3af6cf3edae92ce047c50927524ac5 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/spf13/viper v1.7.1 gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 gitlab.com/elixxir/comms v0.0.4-0.20220104174855-044783c5c1e6 - gitlab.com/elixxir/crypto v0.0.7-0.20220108004933-8da1344a8e69 + gitlab.com/elixxir/crypto v0.0.7-0.20220108174805-4eafed0c4ff7 gitlab.com/elixxir/ekv v0.1.6 gitlab.com/elixxir/primitives v0.0.3-0.20220104173924-275cb9d7834f gitlab.com/xx_network/comms v0.0.4-0.20211227194445-c099754b3cda diff --git a/go.sum b/go.sum index 52d03aac87a21e29aa6d58d5db4da1e7713a1046..4b704150ccf672d79511ac4a4d311d4f611dc6d0 100644 --- a/go.sum +++ b/go.sum @@ -279,6 +279,8 @@ gitlab.com/elixxir/crypto v0.0.7-0.20220104174238-dbd761b30553 h1:BPwepGZspxgiY4 gitlab.com/elixxir/crypto v0.0.7-0.20220104174238-dbd761b30553/go.mod h1:fexaw14nwGMlT6vL9eIJ1ixgiomyAp88hSHl0Yx0/xU= gitlab.com/elixxir/crypto v0.0.7-0.20220108004933-8da1344a8e69 h1:MweUKTjmKvTxWswRhgAyV5cGZubqzlLQ+thdOpUPG+c= gitlab.com/elixxir/crypto v0.0.7-0.20220108004933-8da1344a8e69/go.mod h1:qmW0OGPB21GcaGg1Jvt527/qUw7ke6W8DKCiYBfsx48= +gitlab.com/elixxir/crypto v0.0.7-0.20220108174805-4eafed0c4ff7 h1:UnJTclWu96Cj+XmxqG/H5QELl50UNKCfaJtOSPYwLFw= +gitlab.com/elixxir/crypto v0.0.7-0.20220108174805-4eafed0c4ff7/go.mod h1:qmW0OGPB21GcaGg1Jvt527/qUw7ke6W8DKCiYBfsx48= gitlab.com/elixxir/ekv v0.1.5 h1:R8M1PA5zRU1HVnTyrtwybdABh7gUJSCvt1JZwUSeTzk= gitlab.com/elixxir/ekv v0.1.5/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= gitlab.com/elixxir/ekv v0.1.6 h1:M2hUSNhH/ChxDd+s8xBqSEKgoPtmE6hOEBqQ73KbN6A= diff --git a/storage/fileTransfer/fileMessage.go b/storage/fileTransfer/fileMessage.go index 6718bcfd8d41a204fb784a98e4951462f8d88485..03269326bbeab891e4678c888994fc35ea1026a6 100644 --- a/storage/fileTransfer/fileMessage.go +++ b/storage/fileTransfer/fileMessage.go @@ -15,7 +15,7 @@ import ( // Size constants. const ( partNumLen = 2 // The length of the part number in bytes - fmMinSize = partNumLen // Minimum size for the PartMessage + FmMinSize = partNumLen // Minimum size for the PartMessage ) // Error messages. @@ -46,9 +46,9 @@ type PartMessage struct { // external payload size. An error is returned if the external payload size is // too small to fit the part message. func NewPartMessage(externalPayloadSize int) (PartMessage, error) { - if externalPayloadSize < fmMinSize { + if externalPayloadSize < FmMinSize { return PartMessage{}, - errors.Errorf(newFmSizeErr, externalPayloadSize, fmMinSize) + errors.Errorf(newFmSizeErr, externalPayloadSize, FmMinSize) } return MapPartMessage(make([]byte, externalPayloadSize)), nil @@ -67,9 +67,9 @@ func MapPartMessage(data []byte) PartMessage { // UnmarshalPartMessage converts the bytes into a PartMessage. An error is // returned if the size of the data is too small for a PartMessage. func UnmarshalPartMessage(b []byte) (PartMessage, error) { - if len(b) < fmMinSize { + if len(b) < FmMinSize { return PartMessage{}, - errors.Errorf(unmarshalFmSizeErr, len(b), fmMinSize) + errors.Errorf(unmarshalFmSizeErr, len(b), FmMinSize) } return MapPartMessage(b), nil diff --git a/storage/fileTransfer/fileMessage_test.go b/storage/fileTransfer/fileMessage_test.go index 498e7568f47848c8c01b357676ac8346c7425be3..ad565931e6d44d60f887552e9cb4c1a954fe5cf0 100644 --- a/storage/fileTransfer/fileMessage_test.go +++ b/storage/fileTransfer/fileMessage_test.go @@ -33,8 +33,8 @@ func Test_newPartMessage(t *testing.T) { // Error path: tests that NewPartMessage returns the expected error when the // external payload size is too small. func Test_newPartMessage_SmallPayloadSizeError(t *testing.T) { - externalPayloadSize := fmMinSize - 1 - expectedErr := fmt.Sprintf(newFmSizeErr, externalPayloadSize, fmMinSize) + externalPayloadSize := FmMinSize - 1 + expectedErr := fmt.Sprintf(newFmSizeErr, externalPayloadSize, FmMinSize) _, err := NewPartMessage(externalPayloadSize) if err == nil || err.Error() != expectedErr { @@ -101,8 +101,8 @@ func Test_unmarshalPartMessage(t *testing.T) { // Error path: tests that UnmarshalPartMessage returns the expected error when // the provided data is too small to be unmarshalled into a PartMessage. func Test_unmarshalPartMessage_SizeError(t *testing.T) { - data := make([]byte, fmMinSize-1) - expectedErr := fmt.Sprintf(unmarshalFmSizeErr, len(data), fmMinSize) + data := make([]byte, FmMinSize-1) + expectedErr := fmt.Sprintf(unmarshalFmSizeErr, len(data), FmMinSize) _, err := UnmarshalPartMessage(data) if err == nil || err.Error() != expectedErr { @@ -194,7 +194,7 @@ func Test_fileMessage_setFile(t *testing.T) { // Error path: tests that PartMessage.SetPart returns the expected error when // the provided part data is too large for the message. func Test_fileMessage_setFile_FileTooLargeError(t *testing.T) { - fm, err := NewPartMessage(fmMinSize + 1) + fm, err := NewPartMessage(FmMinSize + 1) if err != nil { t.Errorf("Failed to create new PartMessage: %+v", err) } @@ -214,7 +214,7 @@ func Test_fileMessage_setFile_FileTooLargeError(t *testing.T) { func Test_fileMessage_getFileSize(t *testing.T) { expectedSize := 256 - fm, err := NewPartMessage(fmMinSize + expectedSize) + fm, err := NewPartMessage(FmMinSize + expectedSize) if err != nil { t.Errorf("Failed to create new PartMessage: %+v", err) } diff --git a/storage/fileTransfer/receiveTransfer_test.go b/storage/fileTransfer/receiveTransfer_test.go index 81b14f9056660f4cadac78e3ad4f2f2a63304ddf..ff5c47ce5effe05a4069e3196b7be8c26880c7d5 100644 --- a/storage/fileTransfer/receiveTransfer_test.go +++ b/storage/fileTransfer/receiveTransfer_test.go @@ -749,12 +749,25 @@ func Test_loadReceivedTransfer_LoadFpVectorError(t *testing.T) { tid, rt, _ := newRandomReceivedTransfer(16, 20, kv, t) // Create encrypted part + data := []byte("test") partNum, fpNum := uint16(1), uint16(1) - encryptedPart, mac, padding := newEncryptedPartData(rt.key, data, fpNum, t) + + cmixMsg := format.NewMessage(format.MinimumPrimeSize) + + partData, _ := NewPartMessage(cmixMsg.ContentsSize()) + partData.SetPartNum(partNum) + _ = partData.SetPart(data) + + fp := ftCrypto.GenerateFingerprint(rt.key, fpNum) + encryptedPart, mac, err := ftCrypto.EncryptPart(rt.key, partData.Marshal(), fpNum, fp) + + cmixMsg.SetKeyFP(fp) + cmixMsg.SetContents(encryptedPart) + cmixMsg.SetMac(mac) // Add encrypted part - _, err := rt.AddPart(encryptedPart, padding, mac, partNum, fpNum) + _, err = rt.AddPart(cmixMsg, fpNum) if err != nil { t.Errorf("Failed to add test part: %+v", err) } @@ -783,10 +796,22 @@ func Test_loadReceivedTransfer_LoadPartStoreError(t *testing.T) { // Create encrypted part data := []byte("test") partNum, fpNum := uint16(1), uint16(1) - encryptedPart, mac, padding := newEncryptedPartData(rt.key, data, fpNum, t) + + cmixMsg := format.NewMessage(format.MinimumPrimeSize) + + partData, _ := NewPartMessage(cmixMsg.ContentsSize()) + partData.SetPartNum(partNum) + _ = partData.SetPart(data) + + fp := ftCrypto.GenerateFingerprint(rt.key, fpNum) + encryptedPart, mac, err := ftCrypto.EncryptPart(rt.key, partData.Marshal(), fpNum, fp) + + cmixMsg.SetKeyFP(fp) + cmixMsg.SetContents(encryptedPart) + cmixMsg.SetMac(mac) // Add encrypted part - _, err := rt.AddPart(encryptedPart, padding, mac, partNum, fpNum) + _, err = rt.AddPart(cmixMsg, fpNum) if err != nil { t.Errorf("Failed to add test part: %+v", err) } @@ -815,10 +840,22 @@ func Test_loadReceivedTransfer_LoadReceivedVectorError(t *testing.T) { // Create encrypted part data := []byte("test") partNum, fpNum := uint16(1), uint16(1) - encryptedPart, mac, padding := newEncryptedPartData(rt.key, data, fpNum, t) + + cmixMsg := format.NewMessage(format.MinimumPrimeSize) + + partData, _ := NewPartMessage(cmixMsg.ContentsSize()) + partData.SetPartNum(partNum) + _ = partData.SetPart(data) + + fp := ftCrypto.GenerateFingerprint(rt.key, fpNum) + encryptedPart, mac, err := ftCrypto.EncryptPart(rt.key, partData.Marshal(), fpNum, fp) + + cmixMsg.SetKeyFP(fp) + cmixMsg.SetContents(encryptedPart) + cmixMsg.SetMac(mac) // Add encrypted part - _, err := rt.AddPart(encryptedPart, padding, mac, partNum, fpNum) + _, err = rt.AddPart(cmixMsg, fpNum) if err != nil { t.Errorf("Failed to add test part: %+v", err) } @@ -908,11 +945,22 @@ func TestReceivedTransfer_delete(t *testing.T) { // Create encrypted part expectedData := []byte("test") partNum, fpNum := uint16(1), uint16(1) - encryptedPart, mac, padding := newEncryptedPartData( - rt.key, expectedData, fpNum, t) + + cmixMsg := format.NewMessage(format.MinimumPrimeSize) + + partData, _ := NewPartMessage(cmixMsg.ContentsSize()) + partData.SetPartNum(partNum) + _ = partData.SetPart(expectedData) + + fp := ftCrypto.GenerateFingerprint(rt.key, fpNum) + encryptedPart, mac, err := ftCrypto.EncryptPart(rt.key, partData.Marshal(), fpNum, fp) + + cmixMsg.SetKeyFP(fp) + cmixMsg.SetContents(encryptedPart) + cmixMsg.SetMac(mac) // Add encrypted part - _, err := rt.AddPart(encryptedPart, padding, mac, partNum, fpNum) + _, err = rt.AddPart(cmixMsg, fpNum) if err != nil { t.Fatalf("Failed to add test part: %+v", err) } @@ -1067,8 +1115,20 @@ func newRandomReceivedTransfer(numParts, numFps uint16, kv *versioned.KV, } for partNum, part := range parts.parts { - encryptedPart, mac, padding := newEncryptedPartData(key, part, partNum, t) - _, err := rt.AddPart(encryptedPart, padding, mac, partNum, partNum) + cmixMsg := format.NewMessage(format.MinimumPrimeSize) + + partData, _ := NewPartMessage(cmixMsg.ContentsSize()) + partData.SetPartNum(partNum) + _ = partData.SetPart(part) + + fp := ftCrypto.GenerateFingerprint(rt.key, partNum) + encryptedPart, mac, err := ftCrypto.EncryptPart(rt.key, partData.Marshal(), partNum, fp) + + cmixMsg.SetKeyFP(fp) + cmixMsg.SetContents(encryptedPart) + cmixMsg.SetMac(mac) + + _, err = rt.AddPart(cmixMsg, partNum) if err != nil { t.Errorf("Failed to add part #%d: %+v", partNum, err) }