From 33138dd5e74059c7d5d8a0ba59160c786539d15a Mon Sep 17 00:00:00 2001
From: Benjamin Wenger <ben@elixxir.ioo>
Date: Sat, 8 Jan 2022 10:54:54 -0800
Subject: [PATCH] all tests pass

---
 fileTransfer/send_test.go                 | 14 ++++----
 go.mod                                    |  2 +-
 go.sum                                    |  2 ++
 storage/fileTransfer/partStore_test.go    |  6 +++-
 storage/fileTransfer/receiveTransfer.go   |  3 ++
 storage/fileTransfer/sentTransfer_test.go | 44 +++++++----------------
 6 files changed, 31 insertions(+), 40 deletions(-)

diff --git a/fileTransfer/send_test.go b/fileTransfer/send_test.go
index f63ebbac2..2e3d3d16d 100644
--- a/fileTransfer/send_test.go
+++ b/fileTransfer/send_test.go
@@ -662,20 +662,20 @@ func TestManager_newCmixMessage(t *testing.T) {
 			"\nexpected: %s\nrecieved: %s", fp, cmixMsg.GetKeyFP())
 	}
 
-	partMsg, err := ftStorage.UnmarshalPartMessage(cmixMsg.GetContents())
+	decrPart, err := ftCrypto.DecryptPart(key, cmixMsg.GetContents(),
+		 cmixMsg.GetMac(), 0,cmixMsg.GetKeyFP())
 	if err != nil {
-		t.Errorf("Failed to unmarshal part message: %+v", err)
+		t.Errorf("Failed to decrypt file part: %+v", err)
 	}
 
-	decrPart, err := ftCrypto.DecryptPart(key, partMsg.GetPart(),
-		 cmixMsg.GetMac(), partMsg.GetPartNum(),cmixMsg.GetKeyFP())
+	partMsg, err := ftStorage.UnmarshalPartMessage(decrPart)
 	if err != nil {
-		t.Errorf("Failed to decrypt file part: %+v", err)
+		t.Errorf("Failed to unmarshal part message: %+v", err)
 	}
 
-	if !bytes.Equal(decrPart, parts[0]) {
+	if !bytes.Equal(partMsg.GetPart(), parts[0]) {
 		t.Errorf("Decrypted part does not match expected."+
-			"\nexpected: %q\nreceived: %q", parts[0], decrPart)
+			"\nexpected: %q\nreceived: %q", parts[0], partMsg.GetPart())
 	}
 }
 
diff --git a/go.mod b/go.mod
index 9d46000c2..bdf25bafb 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.20220108174805-4eafed0c4ff7
+	gitlab.com/elixxir/crypto v0.0.7-0.20220108181613-7e3f9b9e7434
 	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 4b704150c..87637052d 100644
--- a/go.sum
+++ b/go.sum
@@ -281,6 +281,8 @@ gitlab.com/elixxir/crypto v0.0.7-0.20220108004933-8da1344a8e69 h1:MweUKTjmKvTxWs
 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/crypto v0.0.7-0.20220108181613-7e3f9b9e7434 h1:4wXhEflExxO5Dzaxmz4WqUFmoRjr3ZNJ8pFBsyRXq+c=
+gitlab.com/elixxir/crypto v0.0.7-0.20220108181613-7e3f9b9e7434/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/partStore_test.go b/storage/fileTransfer/partStore_test.go
index 5e3eabae2..597fea4b2 100644
--- a/storage/fileTransfer/partStore_test.go
+++ b/storage/fileTransfer/partStore_test.go
@@ -12,6 +12,7 @@ import (
 	"encoding/binary"
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/elixxir/ekv"
+	"gitlab.com/elixxir/primitives/format"
 	"io"
 	"math/rand"
 	"reflect"
@@ -521,7 +522,10 @@ func Test_makePartsKey_consistency(t *testing.T) {
 func newRandomPartStore(numParts uint16, kv *versioned.KV, prng io.Reader,
 	t *testing.T) (*partStore, []byte) {
 
-	partSize := 64
+	cmixMsg := format.NewMessage(format.MinimumPrimeSize)
+
+	partData, _ := NewPartMessage(cmixMsg.ContentsSize())
+	partSize := partData.GetPartSize()
 
 	ps, err := newPartStore(kv, numParts)
 	if err != nil {
diff --git a/storage/fileTransfer/receiveTransfer.go b/storage/fileTransfer/receiveTransfer.go
index b3e387a75..0d2f638d8 100644
--- a/storage/fileTransfer/receiveTransfer.go
+++ b/storage/fileTransfer/receiveTransfer.go
@@ -10,6 +10,7 @@ package fileTransfer
 import (
 	"bytes"
 	"encoding/binary"
+	"fmt"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/interfaces"
@@ -328,6 +329,8 @@ func (rt *ReceivedTransfer) GetFile() ([]byte, error) {
 	// Remove extra data added when sending as parts
 	fileData = fileData[:rt.fileSize]
 
+	fmt.Println(fileData)
+
 	if !ftCrypto.VerifyTransferMAC(fileData, rt.key, rt.transferMAC) {
 		return fileData, errors.New(getTransferMacErr)
 	}
diff --git a/storage/fileTransfer/sentTransfer_test.go b/storage/fileTransfer/sentTransfer_test.go
index 0885552c7..033992bf8 100644
--- a/storage/fileTransfer/sentTransfer_test.go
+++ b/storage/fileTransfer/sentTransfer_test.go
@@ -815,7 +815,7 @@ func TestSentTransfer_GetEncryptedPart(t *testing.T) {
 	for i := uint16(0); i < st.numFps; i++ {
 		partNum := i % st.numParts
 
-		encPart, mac, fp, err := st.GetEncryptedPart(partNum, 16)
+		encPart, mac, fp, err := st.GetEncryptedPart(partNum, 18)
 		if err != nil {
 			t.Fatalf("GetEncryptedPart returned an error for part number "+
 				"%d (%d): %+v", partNum, i, err)
@@ -835,17 +835,24 @@ func TestSentTransfer_GetEncryptedPart(t *testing.T) {
 		}
 
 		// Attempt to decrypt the part
-		part, err := ftCrypto.DecryptPart(st.key, encPart, mac, fpNum[0], fp)
+		partMarshaled, err := ftCrypto.DecryptPart(st.key, encPart, mac, fpNum[0], fp)
 		if err != nil {
 			t.Errorf("Failed to decrypt file part number %d (%d): %+v",
 				partNum, i, err)
 		}
 
+		partMsg, _ := UnmarshalPartMessage(partMarshaled)
+
 		// Make sure the decrypted part matches the original
 		expectedPart, _ := st.sentParts.getPart(i % st.numParts)
-		if !bytes.Equal(expectedPart, part) {
+		if !bytes.Equal(expectedPart, partMsg.GetPart()) {
 			t.Errorf("Decyrpted part number %d does not match expected (%d)."+
-				"\nexpected: %+v\nreceived: %+v", partNum, i, expectedPart, part)
+				"\nexpected: %+v\nreceived: %+v", partNum, i, expectedPart, partMsg.GetPart())
+		}
+
+		if partMsg.GetPartNum()!=i % st.numParts{
+			t.Errorf("Number of part did not match, expected: %d, " +
+				"received: %d", i % st.numParts, partMsg.GetPartNum())
 		}
 	}
 }
@@ -876,7 +883,7 @@ func TestSentTransfer_GetEncryptedPart_NoFingerprintsError(t *testing.T) {
 	// Use up all the fingerprints
 	for i := uint16(0); i < st.numFps; i++ {
 		partNum := i % st.numParts
-		_, _, _, err := st.GetEncryptedPart(partNum, 16)
+		_, _, _, err := st.GetEncryptedPart(partNum, 18)
 		if err != nil {
 			t.Errorf("Error when encyrpting part number %d (%d): %+v",
 				partNum, i, err)
@@ -884,7 +891,7 @@ func TestSentTransfer_GetEncryptedPart_NoFingerprintsError(t *testing.T) {
 	}
 
 	// Try to encrypt without any fingerprints
-	_, _, _, err := st.GetEncryptedPart(5, 16)
+	_, _, _, err := st.GetEncryptedPart(5, 18)
 	if err != MaxRetriesErr {
 		t.Errorf("GetEncryptedPart did not return MaxRetriesErr when all "+
 			"fingerprints have been used.\nexpected: %s\nreceived: %+v",
@@ -892,31 +899,6 @@ func TestSentTransfer_GetEncryptedPart_NoFingerprintsError(t *testing.T) {
 	}
 }
 
-// Error path: tests that SentTransfer.GetEncryptedPart returns the expected
-// error when encrypting the part fails due to a PRNG error.
-func TestSentTransfer_GetEncryptedPart_EncryptPartError(t *testing.T) {
-	kv := versioned.NewKV(make(ekv.Memstore))
-	_, st := newRandomSentTransfer(16, 24, kv, t)
-
-	// Create and fill fingerprint map used to check fingerprint validity
-	// The first item in the uint16 slice is the fingerprint number and the
-	// second item is the number of times it has been used
-	fpMap := make(map[format.Fingerprint][]uint16, st.numFps)
-	for num, fp := range ftCrypto.GenerateFingerprints(st.key, st.numFps) {
-		fpMap[fp] = []uint16{uint16(num), 0}
-	}
-
-	partNum := uint16(0)
-	expectedErr := fmt.Sprintf(encryptPartErr, partNum, "")
-
-	_, _, _, err := st.GetEncryptedPart(partNum, 16)
-	if err == nil || !strings.Contains(err.Error(), expectedErr) {
-		t.Errorf("GetEncryptedPart did not return the expected error when "+
-			"the PRNG should have errored.\nexpected: %s\nreceived: %+v",
-			expectedErr, err)
-	}
-}
-
 // Tests that SentTransfer.SetInProgress correctly adds the part numbers for the
 // given round ID to the in-progress map and sets the correct parts as
 // in-progress in the state vector.
-- 
GitLab