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)
 		}