From 79ff7517a45a37ad542d3c24cfc5653b747b7e77 Mon Sep 17 00:00:00 2001 From: Christian Hermann Date: Mon, 4 May 2015 17:24:51 +0200 Subject: [PATCH] BSC-01-008 - Checksum prefix is now INSIDE the checksum and useful ... --- StreamCryptor/Model/EncryptedFileChunk.cs | 14 ++++++-------- StreamCryptor/Model/EncryptedFileFooter.cs | 12 ++++++------ StreamCryptor/Model/EncryptedFileHeader.cs | 21 ++++++++++----------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/StreamCryptor/Model/EncryptedFileChunk.cs b/StreamCryptor/Model/EncryptedFileChunk.cs index cee3857..c872428 100644 --- a/StreamCryptor/Model/EncryptedFileChunk.cs +++ b/StreamCryptor/Model/EncryptedFileChunk.cs @@ -44,10 +44,9 @@ public class EncryptedFileChunk /// The length of the checksum. public void SetChunkChecksum(byte[] ephemeralKey, int chunkChecksumLength) { - ChunkChecksum = ArrayHelpers.ConcatArrays(_checksumChunkPrefix, - GenericHash.Hash(ArrayHelpers.ConcatArrays(Chunk, - Utils.IntegerToLittleEndian(ChunkLength)), - Utils.GetEphemeralHashKey(ephemeralKey), chunkChecksumLength)); + ChunkChecksum = GenericHash.Hash(ArrayHelpers.ConcatArrays(_checksumChunkPrefix, Chunk, + Utils.IntegerToLittleEndian(ChunkLength)), + Utils.GetEphemeralHashKey(ephemeralKey), chunkChecksumLength); } /// @@ -58,10 +57,9 @@ public void SetChunkChecksum(byte[] ephemeralKey, int chunkChecksumLength) /// public void ValidateChunkChecksum(byte[] ephemeralKey, int chunkChecksumLength) { - var chunkChecksum = ArrayHelpers.ConcatArrays(_checksumChunkPrefix, - GenericHash.Hash( - ArrayHelpers.ConcatArrays(Chunk, Utils.IntegerToLittleEndian(ChunkLength)), - Utils.GetEphemeralHashKey(ephemeralKey), chunkChecksumLength)); + var chunkChecksum = GenericHash.Hash( + ArrayHelpers.ConcatArrays(_checksumChunkPrefix, Chunk, Utils.IntegerToLittleEndian(ChunkLength)), + Utils.GetEphemeralHashKey(ephemeralKey), chunkChecksumLength); if (!chunkChecksum.SequenceEqual(ChunkChecksum)) { throw new BadFileChunkException("Wrong checksum, file could be damaged or manipulated!"); diff --git a/StreamCryptor/Model/EncryptedFileFooter.cs b/StreamCryptor/Model/EncryptedFileFooter.cs index e29d5ba..10b885e 100644 --- a/StreamCryptor/Model/EncryptedFileFooter.cs +++ b/StreamCryptor/Model/EncryptedFileFooter.cs @@ -30,9 +30,9 @@ public void SetFooterChecksum(byte[] chunkCount, byte[] chunkOverallLength, byte int footerChecksumLength) { //generate and set the Footerchecksum - FooterChecksum = ArrayHelpers.ConcatArrays(_checksumFooterPrefix, - GenericHash.Hash(ArrayHelpers.ConcatArrays(chunkCount, chunkOverallLength), - Utils.GetEphemeralHashKey(ephemeralKey), footerChecksumLength)); + FooterChecksum = GenericHash.Hash(ArrayHelpers.ConcatArrays(_checksumFooterPrefix, + chunkCount, chunkOverallLength), + Utils.GetEphemeralHashKey(ephemeralKey), footerChecksumLength); } /// @@ -46,10 +46,10 @@ public void SetFooterChecksum(byte[] chunkCount, byte[] chunkOverallLength, byte public void ValidateFooterChecksum(byte[] chunkCount, byte[] chunkOverallLength, byte[] ephemeralKey, int footerChecksumLength) { - var footerChecksum = ArrayHelpers.ConcatArrays(_checksumFooterPrefix, GenericHash.Hash( - ArrayHelpers.ConcatArrays(chunkCount, chunkOverallLength), + var footerChecksum = GenericHash.Hash( + ArrayHelpers.ConcatArrays(_checksumFooterPrefix, chunkCount, chunkOverallLength), Utils.GetEphemeralHashKey(ephemeralKey), - footerChecksumLength)); + footerChecksumLength); //check the file footer if (!footerChecksum.SequenceEqual(FooterChecksum)) { diff --git a/StreamCryptor/Model/EncryptedFileHeader.cs b/StreamCryptor/Model/EncryptedFileHeader.cs index 57fef0c..e17fbe7 100644 --- a/StreamCryptor/Model/EncryptedFileHeader.cs +++ b/StreamCryptor/Model/EncryptedFileHeader.cs @@ -133,14 +133,13 @@ public void ProtectFileName(string fileName, int fileNameLength) /// The length of the checksum. public void SetHeaderChecksum(int headerChecksumLength) { - HeaderChecksum = ArrayHelpers.ConcatArrays(_checksumHeaderPrefix, - GenericHash.Hash(ArrayHelpers.ConcatArrays(BaseNonce, - FilenameNonce, Filename, - Utils.IntegerToLittleEndian(Version), - Key, - BitConverter.GetBytes(UnencryptedFileLength)), - Utils.GetEphemeralHashKey(UnencryptedEphemeralKey), - headerChecksumLength)); + HeaderChecksum = GenericHash.Hash(ArrayHelpers.ConcatArrays(_checksumHeaderPrefix, BaseNonce, + FilenameNonce, Filename, + Utils.IntegerToLittleEndian(Version), + Key, + BitConverter.GetBytes(UnencryptedFileLength)), + Utils.GetEphemeralHashKey(UnencryptedEphemeralKey), + headerChecksumLength); } /// @@ -151,14 +150,14 @@ public void SetHeaderChecksum(int headerChecksumLength) /// public void ValidateHeaderChecksum(byte[] ephemeralKey, int headerChecksumLength) { - var headerChecksum = ArrayHelpers.ConcatArrays(_checksumHeaderPrefix, GenericHash.Hash( - ArrayHelpers.ConcatArrays(BaseNonce, + var headerChecksum = GenericHash.Hash( + ArrayHelpers.ConcatArrays(_checksumHeaderPrefix, BaseNonce, FilenameNonce, Filename, Utils.IntegerToLittleEndian(Version), Key, BitConverter.GetBytes(UnencryptedFileLength)), Utils.GetEphemeralHashKey(ephemeralKey), - headerChecksumLength)); + headerChecksumLength); if (!headerChecksum.SequenceEqual(HeaderChecksum)) { throw new BadFileHeaderException("Malformed file header: file could be damaged or manipulated!");