C ordening
This commit is contained in:
435
C/C(extra) ExtraAssignments/Stegano/stegano_test.c
Normal file
435
C/C(extra) ExtraAssignments/Stegano/stegano_test.c
Normal file
@@ -0,0 +1,435 @@
|
||||
/* auteur : F.J. Hurkmans
|
||||
* datum : November 4th 2013
|
||||
* code : Ansi C
|
||||
* versie : 1
|
||||
*/
|
||||
|
||||
#include "bmp.h"
|
||||
#include "stegano.h"
|
||||
#include "unity.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "resource_detector.h"
|
||||
|
||||
// I rather dislike keeping line numbers updated, so I made my own macro to
|
||||
// ditch the line number
|
||||
#define MY_RUN_TEST(func) RUN_TEST(func, 0)
|
||||
|
||||
|
||||
void setUp(void)
|
||||
{
|
||||
// This is run before EACH test
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
// This is run after EACH test
|
||||
const char* FilenamesToDeleteAfterTest[] = {
|
||||
"demux_ImageCitroen2Cv.bmp",
|
||||
"demux_TextFontys.txt",
|
||||
"demux_ImageRedFerrari_0.bmp",
|
||||
"demux_ImageRedFerrari_1.bmp",
|
||||
"demux_ImageRedFerrari_4.bmp",
|
||||
"demux_ImageRedFerrari_7.bmp",
|
||||
"demux_ImageRedFerrari_8.bmp",
|
||||
"demux_ImageTrabant_0.bmp",
|
||||
"demux_ImageTrabant_1.bmp",
|
||||
"demux_ImageTrabant_4.bmp",
|
||||
"demux_ImageTrabant_7.bmp",
|
||||
"demux_ImageTrabant_8.bmp",
|
||||
"mux_ImageCitroen2Cv.bmp_TextFontys.txt.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_0.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_1.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_2.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_3.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_4.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_5.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_6.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_7.bmp",
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_8.bmp"
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < (sizeof(FilenamesToDeleteAfterTest) /
|
||||
sizeof(FilenamesToDeleteAfterTest[0]));
|
||||
i++)
|
||||
{
|
||||
remove(FilenamesToDeleteAfterTest[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static int GetFileSize(FILE* FilePtr)
|
||||
{
|
||||
int CurrPos = ftell(FilePtr);
|
||||
int EndPos = 0;
|
||||
TEST_ASSERT_EQUAL(0, fseek(FilePtr, 0L, SEEK_END));
|
||||
EndPos = ftell(FilePtr);
|
||||
TEST_ASSERT_EQUAL(0, fseek(FilePtr, CurrPos, SEEK_SET));
|
||||
return EndPos;
|
||||
}
|
||||
|
||||
static void Assert2FilesEqual(char* File1, char* File2)
|
||||
{
|
||||
const size_t BufferSize = 4096;
|
||||
FILE* File1Ptr = fopen(File1, "rb");
|
||||
TEST_ASSERT_NOT_NULL(File1Ptr);
|
||||
FILE* File2Ptr = fopen(File2, "rb");
|
||||
TEST_ASSERT_NOT_NULL(File2Ptr);
|
||||
|
||||
int File1Size = GetFileSize(File1Ptr);
|
||||
int File2Size = GetFileSize(File2Ptr);
|
||||
|
||||
TEST_ASSERT_EQUAL(File1Size, File2Size);
|
||||
|
||||
char* File1Buffer = malloc(BufferSize);
|
||||
TEST_ASSERT_NOT_NULL(File1Buffer);
|
||||
char* File2Buffer = malloc(BufferSize);
|
||||
TEST_ASSERT_NOT_NULL(File2Buffer);
|
||||
|
||||
size_t File1Read = 0;
|
||||
size_t File2Read = 0;
|
||||
|
||||
do
|
||||
{
|
||||
File1Read = fread(File1Buffer, 1, BufferSize, File1Ptr);
|
||||
File2Read = fread(File2Buffer, 1, BufferSize, File2Ptr);
|
||||
TEST_ASSERT_EQUAL(File1Read, File2Read);
|
||||
if (File1Read > 0)
|
||||
{
|
||||
TEST_ASSERT_EQUAL_INT8_ARRAY(File1Buffer, File2Buffer, File1Read);
|
||||
}
|
||||
} while ((File1Read > 0) && (File2Read > 0));
|
||||
|
||||
free(File1Buffer);
|
||||
free(File2Buffer);
|
||||
|
||||
fclose(File1Ptr);
|
||||
fclose(File2Ptr);
|
||||
}
|
||||
|
||||
static void
|
||||
CheckBmp(char* Filename, const uint32_t* CorrectHeader,
|
||||
const uint8_t* FirstPixels, const uint8_t* LastPixels)
|
||||
{
|
||||
const int NrHeaderInts = 13;
|
||||
const int NrPixels = 8;
|
||||
const int BytesPerPixel = 3;
|
||||
char message[300];
|
||||
sprintf(message, "CheckBmp on filename: %s", Filename);
|
||||
FILE* FilePtr = NULL;
|
||||
uint32_t Header[NrHeaderInts];
|
||||
uint8_t PixelData[NrPixels * BytesPerPixel];
|
||||
int Result = 0;
|
||||
|
||||
FilePtr = fopen(Filename, "rb");
|
||||
TEST_ASSERT_NOT_NULL(FilePtr);
|
||||
|
||||
|
||||
fseek(FilePtr, 0x02, SEEK_SET);// skip 'BM' magic
|
||||
TEST_ASSERT_EQUAL_MESSAGE(
|
||||
NrHeaderInts,
|
||||
fread(&Header, sizeof(Header[0]), NrHeaderInts, FilePtr),
|
||||
message);
|
||||
TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(
|
||||
CorrectHeader, Header, NrHeaderInts, message);
|
||||
|
||||
fseek(FilePtr,
|
||||
sizeof(BMP_MAGIC_t) + sizeof(BMP_FILE_t) + sizeof(BMP_INFO_t),
|
||||
SEEK_SET);
|
||||
Result = fread(PixelData, sizeof(PixelData[0]), NrPixels * BytesPerPixel,
|
||||
FilePtr);
|
||||
TEST_ASSERT_EQUAL_MESSAGE(NrPixels * BytesPerPixel, Result, message);
|
||||
TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(
|
||||
FirstPixels, PixelData, NrPixels * BytesPerPixel, message);
|
||||
|
||||
fseek(FilePtr, -1 * NrPixels * BytesPerPixel, SEEK_END);
|
||||
Result = fread(PixelData, sizeof(PixelData[0]), NrPixels * BytesPerPixel,
|
||||
FilePtr);
|
||||
TEST_ASSERT_EQUAL_MESSAGE(NrPixels * BytesPerPixel, Result, message);
|
||||
TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(
|
||||
LastPixels, PixelData, NrPixels * BytesPerPixel, message);
|
||||
|
||||
fclose(FilePtr);
|
||||
}
|
||||
|
||||
|
||||
static void test_GetSubstring(void)
|
||||
{
|
||||
const uint8_t TestData[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08,
|
||||
0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08,
|
||||
0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
|
||||
0x40, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08,
|
||||
0x10, 0x20, 0x40, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x03, 0x06,
|
||||
0x0c, 0x18, 0x30, 0x60, 0xc0, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x02,
|
||||
0x04, 0x08, 0x10, 0x20, 0x40, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x02,
|
||||
0x04, 0x08, 0x10, 0x20, 0x40, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x06,
|
||||
0x0c, 0x18, 0x30, 0x60, 0xc0, 0x04, 0x08, 0x10, 0x20, 0x40, 0x0a, 0x14,
|
||||
0x28, 0x50, 0xa0, 0x05, 0x0a, 0x14, 0x28, 0x50, 0x0a, 0x14, 0x28, 0x50,
|
||||
0xa0, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0x14, 0x28, 0x50, 0xa0, 0x0a, 0x14,
|
||||
0x28, 0x50, 0x15, 0x2a, 0x54, 0xa8, 0x1a, 0x34, 0x68, 0xd0, 0x14, 0x28,
|
||||
0x50, 0x2a, 0x54, 0xa8, 0x35, 0x6a, 0xd4, 0x54, 0xa8, 0x6a, 0xd4
|
||||
};
|
||||
uint8_t Src = 0xd4;
|
||||
uint8_t SrcPos;
|
||||
uint8_t NrBits;
|
||||
uint8_t DestPos;
|
||||
int TestDataIndex = 0;
|
||||
|
||||
for (int j = 1; j < 8; j++)
|
||||
{
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
for (int k = 0; k < 8; k++)
|
||||
{
|
||||
if ((i + j <= 8) && (k + j <= 8))
|
||||
{
|
||||
SrcPos = i;
|
||||
NrBits = j;
|
||||
DestPos = k;
|
||||
char message[80];
|
||||
sprintf(message, "SrcPos: %i, NrBits: %i, DestPos: %i",
|
||||
SrcPos, NrBits, DestPos);
|
||||
TEST_ASSERT_EQUAL_HEX8_MESSAGE(
|
||||
TestData[TestDataIndex++],
|
||||
SteganoGetSubstring(
|
||||
Src, SrcPos, NrBits, DestPos),
|
||||
message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void test_MultiplexTwoImages(void)
|
||||
{
|
||||
const char* File1 = "ImageTrabant.bmp";
|
||||
const char* File2 = "ImageRedFerrari.bmp";
|
||||
SteganoMultiplex(File1, File2);
|
||||
|
||||
uint32_t CorrectHeader0[] = { 0xc8a36, 0x1ac0280, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x0 };
|
||||
uint8_t CorrectFirstBytes0[] = { 0x58, 0x5d, 0x5e, 0x4e, 0x53, 0x54,
|
||||
0x4e, 0x53, 0x54, 0x58, 0x5d, 0x5e,
|
||||
0x57, 0x5c, 0x5d, 0x4d, 0x52, 0x53,
|
||||
0x4d, 0x52, 0x55, 0x57, 0x5c, 0x5f };
|
||||
uint8_t CorrectLastBytes0[] = { 0x11, 0x58, 0x48, 0x11, 0x5a, 0x4a,
|
||||
0x13, 0x5b, 0x4e, 0x1b, 0x63, 0x56,
|
||||
0x22, 0x67, 0x5c, 0x17, 0x5c, 0x51,
|
||||
0x11, 0x54, 0x4b, 0x19, 0x5c, 0x53 };
|
||||
CheckBmp("mux_ImageTrabant.bmp_ImageRedFerrari.bmp_0.bmp", CorrectHeader0,
|
||||
CorrectFirstBytes0, CorrectLastBytes0);
|
||||
uint32_t CorrectHeader1[] = { 0xc8a36, 0x1ac0280, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x1 };
|
||||
uint8_t CorrectFirstBytes1[] = { 0x59, 0x5d, 0x5f, 0x4f, 0x53, 0x55,
|
||||
0x4f, 0x53, 0x55, 0x59, 0x5d, 0x5f,
|
||||
0x57, 0x5d, 0x5d, 0x4d, 0x53, 0x53,
|
||||
0x4d, 0x53, 0x55, 0x57, 0x5d, 0x5f };
|
||||
uint8_t CorrectLastBytes1[] = { 0x10, 0x58, 0x48, 0x10, 0x5a, 0x4a,
|
||||
0x12, 0x5a, 0x4e, 0x1a, 0x62, 0x56,
|
||||
0x22, 0x66, 0x5c, 0x16, 0x5c, 0x50,
|
||||
0x10, 0x54, 0x4a, 0x18, 0x5c, 0x52 };
|
||||
CheckBmp("mux_ImageTrabant.bmp_ImageRedFerrari.bmp_1.bmp", CorrectHeader1,
|
||||
CorrectFirstBytes1, CorrectLastBytes1);
|
||||
uint32_t CorrectHeader4[] = { 0xc8a36, 0x1ac0280, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x4 };
|
||||
uint8_t CorrectFirstBytes4[] = { 0x5d, 0x5d, 0x5d, 0x4d, 0x5d, 0x5d,
|
||||
0x4d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
|
||||
0x5d, 0x5d, 0x5d, 0x4d, 0x5d, 0x5d,
|
||||
0x4d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d };
|
||||
uint8_t CorrectLastBytes4[] = { 0x10, 0x50, 0x40, 0x10, 0x50, 0x40,
|
||||
0x10, 0x50, 0x40, 0x10, 0x60, 0x50,
|
||||
0x20, 0x60, 0x50, 0x10, 0x50, 0x50,
|
||||
0x10, 0x50, 0x40, 0x10, 0x50, 0x50 };
|
||||
CheckBmp("mux_ImageTrabant.bmp_ImageRedFerrari.bmp_4.bmp", CorrectHeader4,
|
||||
CorrectFirstBytes4, CorrectLastBytes4);
|
||||
uint32_t CorrectHeader7[] = { 0xc8a36, 0x1ac0280, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x7 };
|
||||
uint8_t CorrectFirstBytes7[] = { 0x69, 0x69, 0x69, 0x69, 0x69, 0x69,
|
||||
0x69, 0x69, 0x69, 0x69, 0x69, 0x69,
|
||||
0x69, 0x69, 0x69, 0x69, 0x69, 0x69,
|
||||
0x69, 0x69, 0x69, 0x69, 0x69, 0x69 };
|
||||
uint8_t CorrectLastBytes7[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
CheckBmp("mux_ImageTrabant.bmp_ImageRedFerrari.bmp_7.bmp", CorrectHeader7,
|
||||
CorrectFirstBytes7, CorrectLastBytes7);
|
||||
uint32_t CorrectHeader8[] = { 0xc8a36, 0x1ac0280, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x8 };
|
||||
uint8_t CorrectFirstBytes8[] = { 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
|
||||
0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
|
||||
0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
|
||||
0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3 };
|
||||
uint8_t CorrectLastBytes8[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
CheckBmp("mux_ImageTrabant.bmp_ImageRedFerrari.bmp_8.bmp", CorrectHeader8,
|
||||
CorrectFirstBytes8, CorrectLastBytes8);
|
||||
}
|
||||
|
||||
static void test_DemultiplexTwoImages(void)
|
||||
{
|
||||
const char* File1 = "ImageTrabant.bmp";
|
||||
const char* File2 = "ImageRedFerrari.bmp";
|
||||
SteganoMultiplex(File1, File2);
|
||||
|
||||
SteganoDemultiplex(
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_0.bmp",
|
||||
"demux_ImageTrabant_0.bmp", "demux_ImageRedFerrari_0.bmp");
|
||||
SteganoDemultiplex(
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_1.bmp",
|
||||
"demux_ImageTrabant_1.bmp", "demux_ImageRedFerrari_1.bmp");
|
||||
SteganoDemultiplex(
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_4.bmp",
|
||||
"demux_ImageTrabant_4.bmp", "demux_ImageRedFerrari_4.bmp");
|
||||
SteganoDemultiplex(
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_7.bmp",
|
||||
"demux_ImageTrabant_7.bmp", "demux_ImageRedFerrari_7.bmp");
|
||||
SteganoDemultiplex(
|
||||
"mux_ImageTrabant.bmp_ImageRedFerrari.bmp_8.bmp",
|
||||
"demux_ImageTrabant_8.bmp", "demux_ImageRedFerrari_8.bmp");
|
||||
uint32_t CorrectHeader0[] = { 0xc8a36, 0x0, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x0 };
|
||||
uint8_t CorrectFirstBytes0[] = { 0x50, 0x50, 0x50, 0x40, 0x50, 0x50,
|
||||
0x40, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
0x50, 0x50, 0x50, 0x40, 0x50, 0x50,
|
||||
0x40, 0x50, 0x50, 0x50, 0x50, 0x50 };
|
||||
uint8_t CorrectLastBytes0[] = { 0x10, 0x50, 0x40, 0x10, 0x50, 0x40,
|
||||
0x10, 0x50, 0x40, 0x10, 0x60, 0x50,
|
||||
0x20, 0x60, 0x50, 0x10, 0x50, 0x50,
|
||||
0x10, 0x50, 0x40, 0x10, 0x50, 0x50 };
|
||||
CheckBmp("demux_ImageTrabant_4.bmp", CorrectHeader0, CorrectFirstBytes0,
|
||||
CorrectLastBytes0);
|
||||
uint32_t CorrectHeader1[] = { 0xc8a36, 0x0, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x0 };
|
||||
uint8_t CorrectFirstBytes1[] = { 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
|
||||
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
|
||||
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
|
||||
0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2 };
|
||||
uint8_t CorrectLastBytes1[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
CheckBmp("demux_ImageRedFerrari_7.bmp", CorrectHeader1, CorrectFirstBytes1,
|
||||
CorrectLastBytes1);
|
||||
uint32_t CorrectHeader2[] = { 0xc8a36, 0x0, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x0 };
|
||||
uint8_t CorrectFirstBytes2[] = { 0x58, 0x5c, 0x5e, 0x4e, 0x52, 0x54,
|
||||
0x4e, 0x52, 0x54, 0x58, 0x5c, 0x5e,
|
||||
0x56, 0x5c, 0x5c, 0x4c, 0x52, 0x52,
|
||||
0x4c, 0x52, 0x54, 0x56, 0x5c, 0x5e };
|
||||
uint8_t CorrectLastBytes2[] = { 0x10, 0x58, 0x48, 0x10, 0x5a, 0x4a,
|
||||
0x12, 0x5a, 0x4e, 0x1a, 0x62, 0x56,
|
||||
0x22, 0x66, 0x5c, 0x16, 0x5c, 0x50,
|
||||
0x10, 0x54, 0x4a, 0x18, 0x5c, 0x52 };
|
||||
CheckBmp("demux_ImageTrabant_1.bmp", CorrectHeader2, CorrectFirstBytes2,
|
||||
CorrectLastBytes2);
|
||||
uint32_t CorrectHeader3[] = { 0xc8a36, 0x0, 0x36, 0x28, 0x280,
|
||||
0x1ac, 0x180001, 0x0, 0xc8a00, 0xec4,
|
||||
0xec4, 0x0, 0x0 };
|
||||
uint8_t CorrectFirstBytes3[] = { 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
|
||||
0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
|
||||
0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
|
||||
0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0 };
|
||||
uint8_t CorrectLastBytes3[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
CheckBmp("demux_ImageRedFerrari_4.bmp", CorrectHeader3, CorrectFirstBytes3,
|
||||
CorrectLastBytes3);
|
||||
|
||||
Assert2FilesEqual("ImageTrabant.bmp", "demux_ImageTrabant_0.bmp");
|
||||
Assert2FilesEqual("ImageRedFerrari.bmp", "demux_ImageRedFerrari_8.bmp");
|
||||
}
|
||||
|
||||
static void test_MultiplexTextAndImage(void)
|
||||
{
|
||||
const char* File1 = "ImageCitroen2Cv.bmp";
|
||||
const char* File2 = "TextFontys.txt";
|
||||
SteganoMultiplexText(File1, File2);
|
||||
|
||||
uint32_t CorrectHeader0[] = { 0x56616, 0x115d, 0x36, 0x28, 0x1b8,
|
||||
0x10c, 0x180001, 0x0, 0x565e0, 0x0,
|
||||
0x0, 0x0, 0x0 };
|
||||
uint8_t CorrectFirstBytes0[] = { 0x74, 0x86, 0x8b, 0x98, 0xab, 0xae,
|
||||
0x61, 0x74, 0x76, 0x7c, 0x91, 0x8e,
|
||||
0x91, 0xa4, 0xa3, 0x88, 0x9e, 0x9a,
|
||||
0x93, 0xa8, 0xa3, 0x8c, 0xa3, 0x9c };
|
||||
uint8_t CorrectLastBytes0[] = { 0x3e, 0x5d, 0x36, 0x4a, 0x69, 0x42,
|
||||
0x39, 0x58, 0x33, 0x37, 0x56, 0x31,
|
||||
0x32, 0x50, 0x2d, 0x32, 0x50, 0x2d,
|
||||
0x30, 0x4e, 0x2b, 0x36, 0x54, 0x31 };
|
||||
CheckBmp("mux_ImageCitroen2Cv.bmp_TextFontys.txt.bmp", CorrectHeader0,
|
||||
CorrectFirstBytes0, CorrectLastBytes0);
|
||||
}
|
||||
|
||||
static void test_DemultiplexTextAndImage(void)
|
||||
{
|
||||
const char* File1 = "ImageCitroen2Cv.bmp";
|
||||
const char* File2 = "TextFontys.txt";
|
||||
SteganoMultiplexText(File1, File2);
|
||||
|
||||
SteganoDemultiplexText(
|
||||
"mux_ImageCitroen2Cv.bmp_TextFontys.txt.bmp",
|
||||
"demux_ImageCitroen2Cv.bmp", "demux_TextFontys.txt");
|
||||
uint32_t CorrectHeader0[] = { 0x56616, 0x0, 0x36, 0x28, 0x1b8,
|
||||
0x10c, 0x180001, 0x0, 0x565e0, 0x0,
|
||||
0x0, 0x0, 0x0 };
|
||||
uint8_t CorrectFirstBytes0[] = { 0x74, 0x86, 0x8a, 0x98, 0xaa, 0xae,
|
||||
0x60, 0x74, 0x76, 0x7c, 0x90, 0x8e,
|
||||
0x90, 0xa4, 0xa2, 0x88, 0x9e, 0x9a,
|
||||
0x92, 0xa8, 0xa2, 0x8c, 0xa2, 0x9c };
|
||||
uint8_t CorrectLastBytes0[] = { 0x3e, 0x5d, 0x36, 0x4a, 0x69, 0x42,
|
||||
0x39, 0x58, 0x33, 0x37, 0x56, 0x31,
|
||||
0x32, 0x50, 0x2d, 0x32, 0x50, 0x2d,
|
||||
0x30, 0x4e, 0x2b, 0x36, 0x54, 0x31 };
|
||||
CheckBmp("demux_ImageCitroen2Cv.bmp", CorrectHeader0, CorrectFirstBytes0,
|
||||
CorrectLastBytes0);
|
||||
uint32_t CorrectHeader1[] = { 0x6945202a, 0x6f68646e, 0x206e6576,
|
||||
0x0d2a2a2a, 0x440a0d0a, 0x65542065,
|
||||
0x696e6863, 0x65686373, 0x696e5520,
|
||||
0x73726576, 0x69657469, 0x69452074,
|
||||
0x6f68646e };
|
||||
uint8_t CorrectFirstBytes1[] = { 0x76, 0x65, 0x6e, 0x20, 0x65, 0x6e,
|
||||
0x20, 0x46, 0x6f, 0x6e, 0x74, 0x79,
|
||||
0x73, 0x20, 0x48, 0x6f, 0x67, 0x65,
|
||||
0x73, 0x63, 0x68, 0x6f, 0x6c, 0x65 };
|
||||
uint8_t CorrectLastBytes1[] = { 0x6e, 0x74, 0x79, 0x73, 0x2e, 0x6e,
|
||||
0x6c, 0x0d, 0x0a, 0x0d, 0x0a, 0x2d,
|
||||
0x2d, 0x20, 0x65, 0x69, 0x6e, 0x64,
|
||||
0x65, 0x20, 0x2d, 0x2d, 0x0d, 0x0a };
|
||||
CheckBmp("demux_TextFontys.txt", CorrectHeader1, CorrectFirstBytes1,
|
||||
CorrectLastBytes1);
|
||||
|
||||
Assert2FilesEqual("TextFontys.txt", "demux_TextFontys.txt");
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
UnityBegin();
|
||||
|
||||
MY_RUN_TEST(test_GetSubstring);
|
||||
MY_RUN_TEST(test_MultiplexTwoImages);
|
||||
MY_RUN_TEST(test_DemultiplexTwoImages);
|
||||
MY_RUN_TEST(test_MultiplexTextAndImage);
|
||||
MY_RUN_TEST(test_DemultiplexTextAndImage);
|
||||
|
||||
return UnityEnd();
|
||||
}
|
||||
Reference in New Issue
Block a user