mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-12 16:09:37 -05:00
added StegoSaurus plugin,
Stegosaurus 1.0 is a tool to perform steganography on 24-bit BMP files. Use this to hide and recover any type of file to and from a selected BMP image, without altering the original size of the image git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@1291 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
3d6697e28b
commit
6001db3188
110
retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc
Normal file
110
retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
// Microsoft Visual C++ generated resource script.
|
||||||
|
//
|
||||||
|
#include "resource1.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
#include "afxres.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// English (U.S.) (unknown sub-lang: 0x10) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENN)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ENGLISH, 0x10
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"resource1.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"#include ""afxres.h""\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Icon
|
||||||
|
//
|
||||||
|
|
||||||
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
|
// remains consistent on all systems.
|
||||||
|
IDI_ICON1 ICON "stegosaurus.ico"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Version
|
||||||
|
//
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION 1,0,0,1
|
||||||
|
PRODUCTVERSION 1,0,0,1
|
||||||
|
FILEFLAGSMASK 0x17L
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x1L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x4L
|
||||||
|
FILETYPE 0x1L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "400904b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "FileDescription", "StegoSaurus Exe"
|
||||||
|
VALUE "FileVersion", "1, 0, 0, 1"
|
||||||
|
VALUE "InternalName", "StegoSaurus"
|
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2009"
|
||||||
|
VALUE "OriginalFilename", "StegoSaurus.exe"
|
||||||
|
VALUE "ProductName", "StegoSaurus"
|
||||||
|
VALUE "ProductVersion", "1, 0, 0, 1"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x4009, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // English (U.S.) (unknown sub-lang: 0x10) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
@ -0,0 +1,469 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9.00"
|
||||||
|
Name="StegoSaurus"
|
||||||
|
ProjectGUID="{D796CCD0-452E-4BB6-BA1B-CD24C40AB361}"
|
||||||
|
RootNamespace="StegoSaurus"
|
||||||
|
Keyword="Qt4VSv1.0"
|
||||||
|
TargetFrameworkVersion="0"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=".\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui"
|
||||||
|
PreprocessorDefinitions="UNICODE,WIN32,QT_THREAD_SUPPORT,QT_NO_DEBUG,NDEBUG,QT_CORE_LIB,QT_GUI_LIB"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
|
DebugInformationFormat="0"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies=" qtmain.lib QtCore4.lib QtGui4.lib"
|
||||||
|
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||||
|
AdditionalLibraryDirectories="$(QTDIR)\lib"
|
||||||
|
GenerateDebugInformation="false"
|
||||||
|
SubSystem="2"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui"
|
||||||
|
PreprocessorDefinitions="UNICODE,WIN32,QT_THREAD_SUPPORT,QT_CORE_LIB,QT_GUI_LIB"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies=" qtmaind.lib QtCored4.lib QtGuid4.lib"
|
||||||
|
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||||
|
AdditionalLibraryDirectories="$(QTDIR)\lib"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;cxx;c;def"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\main.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stegosaurus.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\resource.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\resource1.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stegosaurus.h"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Moc'ing stegosaurus.h..."
|
||||||
|
CommandLine=""$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -I".\GeneratedFiles\." -I"$(QTDIR)\include\." -I".\GeneratedFiles\$(ConfigurationName)\." -I".\." -I"$(QTDIR)\include\QtCore\." -I"$(QTDIR)\include\QtGui\." ".\stegosaurus.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_stegosaurus.cpp"
"
|
||||||
|
AdditionalDependencies=""$(QTDIR)\bin\moc.exe";.\stegosaurus.h"
|
||||||
|
Outputs="".\GeneratedFiles\$(ConfigurationName)\moc_stegosaurus.cpp""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Moc'ing stegosaurus.h..."
|
||||||
|
CommandLine=""$(QTDIR)\bin\moc.exe" -DUNICODE -DWIN32 -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -I".\GeneratedFiles\." -I"$(QTDIR)\include\." -I".\GeneratedFiles\$(ConfigurationName)\." -I".\." -I"$(QTDIR)\include\QtCore\." -I"$(QTDIR)\include\QtGui\." ".\stegosaurus.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_stegosaurus.cpp"
"
|
||||||
|
AdditionalDependencies=""$(QTDIR)\bin\moc.exe";.\stegosaurus.h"
|
||||||
|
Outputs="".\GeneratedFiles\$(ConfigurationName)\moc_stegosaurus.cpp""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Form Files"
|
||||||
|
Filter="ui"
|
||||||
|
UniqueIdentifier="{99349809-55BA-4b9d-BF79-8FDBB0286EB3}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stegosaurus.ui"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Uic'ing $(InputPath)..."
|
||||||
|
CommandLine=""$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_stegosaurus.h" "$(InputPath)"
"
|
||||||
|
AdditionalDependencies="$(QTDIR)\bin\uic.exe"
|
||||||
|
Outputs="".\GeneratedFiles\ui_stegosaurus.h""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Uic'ing $(InputPath)..."
|
||||||
|
CommandLine=""$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_stegosaurus.h" "$(InputPath)"
"
|
||||||
|
AdditionalDependencies="$(QTDIR)\bin\uic.exe"
|
||||||
|
Outputs="".\GeneratedFiles\ui_stegosaurus.h""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="qrc;*"
|
||||||
|
UniqueIdentifier="{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}"
|
||||||
|
ParseFiles="false"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\images\stegosaurus-128x128.png"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\images\stegosaurus-16x16.png"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\images\stegosaurus-256x256.png"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\Icons\stegosaurus-256x256.png"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\images\stegosaurus-32x32.png"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\images\stegosaurus-48x48.png"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stegosaurus.qrc"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Rcc'ing stegosaurus.qrc..."
|
||||||
|
CommandLine=""$(QTDIR)\bin\rcc.exe" -name "stegosaurus" -no-compress ".\stegosaurus.qrc" -o .\GeneratedFiles\qrc_stegosaurus.cpp
"
|
||||||
|
AdditionalDependencies=".\stegosaurus.qrc;.\images\stegosaurus-128x128.png;.\images\stegosaurus-16x16.png;.\images\stegosaurus-256x256.png;.\images\stegosaurus-32x32.png;.\images\stegosaurus-48x48.png"
|
||||||
|
Outputs=".\GeneratedFiles\qrc_stegosaurus.cpp"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Rcc'ing stegosaurus.qrc..."
|
||||||
|
CommandLine=""$(QTDIR)\bin\rcc.exe" -name "stegosaurus" -no-compress ".\stegosaurus.qrc" -o .\GeneratedFiles\qrc_stegosaurus.cpp
"
|
||||||
|
AdditionalDependencies=".\stegosaurus.qrc;.\images\stegosaurus-128x128.png;.\images\stegosaurus-16x16.png;.\images\stegosaurus-256x256.png;.\images\stegosaurus-32x32.png;.\images\stegosaurus-48x48.png"
|
||||||
|
Outputs=".\GeneratedFiles\qrc_stegosaurus.cpp"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Generated Files"
|
||||||
|
Filter="moc;h;cpp"
|
||||||
|
UniqueIdentifier="{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}"
|
||||||
|
SourceControlFiles="false"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\GeneratedFiles\Debug\moc_stegosaurus.cpp"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\GeneratedFiles\Release\moc_stegosaurus.cpp"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\GeneratedFiles\qrc_stegosaurus.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\GeneratedFiles\ui_stegosaurus.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<File
|
||||||
|
RelativePath=".\icon2.ico"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stegosaurus.ico"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\StegoSaurus.rc"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
<Global
|
||||||
|
Name="MocDir"
|
||||||
|
Value=".\GeneratedFiles\$(ConfigurationName)"
|
||||||
|
/>
|
||||||
|
<Global
|
||||||
|
Name="QtVersion"
|
||||||
|
Value="4.4.3"
|
||||||
|
/>
|
||||||
|
<Global
|
||||||
|
Name="RccDir"
|
||||||
|
Value=".\GeneratedFiles"
|
||||||
|
/>
|
||||||
|
<Global
|
||||||
|
Name="UicDir"
|
||||||
|
Value=".\GeneratedFiles"
|
||||||
|
/>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
@ -0,0 +1,32 @@
|
|||||||
|
//#include <QApplication>
|
||||||
|
//#include <QString>
|
||||||
|
//#include <QPushButton>
|
||||||
|
|
||||||
|
#include "StegoSaurusPlugin.h"
|
||||||
|
#include "stegosaurus.h"
|
||||||
|
|
||||||
|
QString
|
||||||
|
StegoSaurusPlugin::pluginDescription() const
|
||||||
|
{
|
||||||
|
QString res;
|
||||||
|
res = "a StegoSaurus plugin" ;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString
|
||||||
|
StegoSaurusPlugin::pluginName() const
|
||||||
|
{
|
||||||
|
return "StegoSaurus" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget*
|
||||||
|
StegoSaurusPlugin::pluginWidget(QWidget * parent )
|
||||||
|
{
|
||||||
|
StegoSaurus* window = new StegoSaurus(parent);
|
||||||
|
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Q_EXPORT_PLUGIN2(stegosaurus_plugin, StegoSaurusPlugin)
|
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef _STEGOSAURUS_PLUGIN_H_
|
||||||
|
#define _STEGOSAURUS_PLUGIN_H_
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
#include <PluginInterface.h>
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
class StegoSaurusPlugin: public QObject, public PluginInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_INTERFACES(PluginInterface)
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
virtual QString pluginDescription() const ;
|
||||||
|
virtual QString pluginName() const ;
|
||||||
|
|
||||||
|
virtual QWidget* pluginWidget(QWidget * parent = 0) ;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 563 B |
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
15
retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp
Normal file
15
retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
***************************Author: Agnit Sarkar******************************
|
||||||
|
**************************CopyRight: April 2009******************************
|
||||||
|
********************* Email: agnitsarkar@yahoo.co.uk*************************
|
||||||
|
****************************************************************************/
|
||||||
|
#include <QtGui/QApplication>
|
||||||
|
#include "stegosaurus.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
StegoSaurus w;
|
||||||
|
w.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
14
retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h
Normal file
14
retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by StegoSaurus.rc
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
@ -0,0 +1,16 @@
|
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by StegoSaurus.rc
|
||||||
|
//
|
||||||
|
#define IDI_ICON1 101
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 103
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
@ -0,0 +1,453 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
***************************Author: Agnit Sarkar******************************
|
||||||
|
**************************CopyRight: April 2009******************************
|
||||||
|
********************* Email: agnitsarkar@yahoo.co.uk*************************
|
||||||
|
****************************************************************************/
|
||||||
|
#include "stegosaurus.h"
|
||||||
|
|
||||||
|
StegoSaurus::StegoSaurus(QWidget *parent, Qt::WFlags flags)
|
||||||
|
: QDialog(parent, flags)
|
||||||
|
{
|
||||||
|
ui.setupUi(this);
|
||||||
|
setWindowOpacity(0.5);
|
||||||
|
bitsAvailable=0;
|
||||||
|
sizeofData=0;
|
||||||
|
inputFileSize=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
StegoSaurus::~StegoSaurus()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void StegoSaurus::on_btnDryImg_clicked()
|
||||||
|
{
|
||||||
|
static QString srcImgFileName="/home/";
|
||||||
|
srcImgFileName= QFileDialog::getOpenFileName(this, "Open Bitmap", srcImgFileName, "Bitmap Files(*.bmp)");
|
||||||
|
|
||||||
|
if(srcImgFileName.isEmpty()){
|
||||||
|
ui.lblDryImgDisplay->setText("<h2>Drag Image Here<br><br>OR<br><br>Select it by browsing<br><br>(BMP Images only)</h2>");
|
||||||
|
ui.lblDryImgDisplay->setPixmap(QPixmap(":/StegoSaurus/images/stegosaurus-256x256.png"));
|
||||||
|
bitsAvailable=0;
|
||||||
|
ui.txtDryImg->setText("");
|
||||||
|
ui.lblDryImgInfo->setText("No image Loaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setDryImage(srcImgFileName);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StegoSaurus::on_btnFiletoHide_clicked()
|
||||||
|
{
|
||||||
|
static QString srcFileName="/home/";
|
||||||
|
srcFileName= QFileDialog::getOpenFileName(this, "Open file to hide", srcFileName);
|
||||||
|
|
||||||
|
if(srcFileName.isEmpty()){
|
||||||
|
inputFileSize=0;
|
||||||
|
ui.txtFiletoHide->setText("");
|
||||||
|
ui.lblFiletoHideinfo->setText("No file loaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get File information
|
||||||
|
QFileInfo fi= QFileInfo(srcFileName);
|
||||||
|
inputFileSize= fi.size();
|
||||||
|
ui.txtFiletoHide->setText(srcFileName);
|
||||||
|
ui.lblFiletoHideinfo->setText(QString("Size=%L1 bytes").arg(inputFileSize));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StegoSaurus::resizeEvent(QResizeEvent * event)
|
||||||
|
{
|
||||||
|
//Set the label image
|
||||||
|
if(ui.txtDryImg->text().isEmpty())
|
||||||
|
return;
|
||||||
|
QPixmap pixmap(ui.txtDryImg->text());
|
||||||
|
pixmap= pixmap.scaledToHeight(ui.lblDryImgDisplay->height());
|
||||||
|
ui.lblDryImgDisplay->setPixmap(pixmap);
|
||||||
|
|
||||||
|
QPixmap pixmap2(ui.txtWetImg->text());
|
||||||
|
pixmap2= pixmap2.scaledToHeight(ui.lblWetImgDisplay->height());
|
||||||
|
ui.lblWetImgDisplay->setPixmap(pixmap2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StegoSaurus::on_btnWetImg_clicked()
|
||||||
|
{
|
||||||
|
static QString srcImgFileName="/home/";
|
||||||
|
srcImgFileName= QFileDialog::getOpenFileName(this, "Open Bitmap", srcImgFileName, "Bitmap Files(*.bmp)");
|
||||||
|
|
||||||
|
if(srcImgFileName.isEmpty()){
|
||||||
|
ui.lblWetImgDisplay->setText("<h2>Drag Image Here<br><br>OR<br><br>Select it by browsing<br><br>(BMP Images only)</h2>");
|
||||||
|
ui.lblWetImgDisplay->setPixmap(QPixmap(":/StegoSaurus/images/stegosaurus-256x256.png"));
|
||||||
|
ui.lblWetImgInfo->setText("No image loaded");
|
||||||
|
ui.txtWetImg->setText("");
|
||||||
|
sizeofData=0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setWetImage(srcImgFileName);
|
||||||
|
|
||||||
|
}
|
||||||
|
void StegoSaurus::setDryImage(const QString &srcImgFileName)
|
||||||
|
{
|
||||||
|
//Get file info
|
||||||
|
dryImage= new QImage(srcImgFileName);
|
||||||
|
unsigned int height= dryImage->height();
|
||||||
|
unsigned int width= dryImage->width();
|
||||||
|
int depth= dryImage->depth();
|
||||||
|
//Check the depth, and return if it is not 24-bit
|
||||||
|
if(depth<24){
|
||||||
|
QMessageBox::information(this, "StegoSaurus", "Must be 24-bit bitmap.");
|
||||||
|
ui.txtDryImg->setText("");
|
||||||
|
ui.lblDryImgInfo->setText("No image Loaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set the label image
|
||||||
|
QPixmap pixmap(srcImgFileName);
|
||||||
|
pixmap= pixmap.scaledToHeight(ui.lblDryImgDisplay->height());
|
||||||
|
ui.lblDryImgDisplay->setPixmap(pixmap);
|
||||||
|
bitsAvailable= height*width*3;
|
||||||
|
|
||||||
|
ui.txtDryImg->setText(srcImgFileName);
|
||||||
|
|
||||||
|
if(bitsAvailable){
|
||||||
|
ui.lblDryImgInfo->setText(QString("Height= %L1 Width=%L2 Free Space=%L3 bytes").arg(height)
|
||||||
|
.arg(width).arg(bitsAvailable/8));
|
||||||
|
}else{
|
||||||
|
ui.lblDryImgInfo->setText("No room for data");
|
||||||
|
qApp->beep();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void StegoSaurus::setWetImage(const QString &srcImgFileName)
|
||||||
|
{
|
||||||
|
//Get file info
|
||||||
|
wetImage= new QImage(srcImgFileName);
|
||||||
|
unsigned int height= wetImage->height();
|
||||||
|
unsigned int width= wetImage->width();
|
||||||
|
int depth= wetImage->depth();
|
||||||
|
|
||||||
|
//Check the depth, and return if it is not 24-bit
|
||||||
|
if(depth<24){
|
||||||
|
QMessageBox::information(this, "StegoSaurus", "Must be 24-bit bitmap.");
|
||||||
|
ui.txtWetImg->setText("");
|
||||||
|
ui.lblWetImgInfo->setText("No image Loaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set the label image
|
||||||
|
QPixmap pixmap(srcImgFileName);
|
||||||
|
pixmap= pixmap.scaledToHeight(ui.lblWetImgDisplay->height());
|
||||||
|
ui.lblWetImgDisplay->setPixmap(pixmap);
|
||||||
|
|
||||||
|
//Read the size of the embeded data
|
||||||
|
QFile imgFile(srcImgFileName);
|
||||||
|
if (!imgFile.open(QIODevice::ReadOnly)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to open bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(imgFile.seek(6)){
|
||||||
|
imgFile.read((char *)&sizeofData, 4);
|
||||||
|
}else{
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.txtWetImg->setText(srcImgFileName);
|
||||||
|
|
||||||
|
if(sizeofData){
|
||||||
|
ui.lblWetImgInfo->setText(QString("Height= %L1 Width=%L2 Probable Size of Data=%L3 bytes").arg(height)
|
||||||
|
.arg(width).arg(sizeofData));
|
||||||
|
}else{
|
||||||
|
ui.lblWetImgInfo->setText("No data in image.");
|
||||||
|
qApp->beep();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//The drag and drop methods
|
||||||
|
void StegoSaurus::dragEnterEvent(QDragEnterEvent *event)
|
||||||
|
{
|
||||||
|
if(ui.tabWidget->currentIndex()==2)return;
|
||||||
|
|
||||||
|
if (event->mimeData()->hasFormat("text/uri-list")){
|
||||||
|
QList<QUrl> urls = event->mimeData()->urls();
|
||||||
|
if (urls.isEmpty())
|
||||||
|
return;
|
||||||
|
QString fileName = urls.first().toLocalFile();
|
||||||
|
//Check the extension
|
||||||
|
if (fileName.isEmpty()||!fileName.endsWith(".bmp", Qt::CaseInsensitive))
|
||||||
|
return;
|
||||||
|
event->acceptProposedAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void StegoSaurus::dropEvent(QDropEvent *event)
|
||||||
|
{
|
||||||
|
QList<QUrl> urls = event->mimeData()->urls();
|
||||||
|
if (urls.isEmpty())
|
||||||
|
return;
|
||||||
|
QString fileName = urls.first().toLocalFile();
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch(ui.tabWidget->currentIndex()){
|
||||||
|
case 0:
|
||||||
|
setDryImage(fileName);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
setWetImage(fileName);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//The hide methods
|
||||||
|
void StegoSaurus::on_btnHide_clicked()
|
||||||
|
{
|
||||||
|
//Get the filenames
|
||||||
|
QString imgFileName= ui.txtDryImg->text();
|
||||||
|
QString inputFileName= ui.txtFiletoHide->text();
|
||||||
|
//Check if both image file and data file has been selected
|
||||||
|
if(imgFileName.isEmpty()||inputFileName.isEmpty()){
|
||||||
|
QMessageBox::information(this, "StegoSaurus", "Please select a bitmap image and a data file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Now check if size of the data file is less than that of the space available
|
||||||
|
if(inputFileSize*8>bitsAvailable){
|
||||||
|
QMessageBox::information(this, "StegoSaurus", "Not enough space available in image to hide the data.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
static QString targetImgName="/home/";
|
||||||
|
targetImgName= QFileDialog::getSaveFileName(this, "Save bitmap with data to", targetImgName, "Bitmap Files(*.bmp)");
|
||||||
|
|
||||||
|
if(targetImgName.isEmpty())return;
|
||||||
|
|
||||||
|
//If an image file with the same name exists delete it and then copy, unless source and target are same
|
||||||
|
if(imgFileName!=inputFileName){
|
||||||
|
QFile::remove(targetImgName);
|
||||||
|
QFile::copy(imgFileName, targetImgName);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Calculate the no. of padding bytes
|
||||||
|
unsigned int width= dryImage->width();
|
||||||
|
unsigned int padding=0;
|
||||||
|
if((width*3)%4==0)
|
||||||
|
padding=0;
|
||||||
|
unsigned int quotient= (width*3)/4;
|
||||||
|
padding= 4*(quotient+1)- width*3;
|
||||||
|
|
||||||
|
/////////////////////////////////Hide the data////////////////////////////////////////////
|
||||||
|
QFile inputFile(inputFileName);
|
||||||
|
if (!inputFile.open(QIODevice::ReadOnly)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to open data file for reading.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Stamp the size of the data file to the reserved bytes of the image file
|
||||||
|
QFile imgOutputFile(targetImgName);
|
||||||
|
if (!imgOutputFile.open(QIODevice::ReadWrite)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to open bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(imgOutputFile.seek(6)){
|
||||||
|
imgOutputFile.write((char *)&inputFileSize, 4);
|
||||||
|
}else{
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to write to bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Read the dataoffset of the bitmap
|
||||||
|
unsigned int dataoffset=0;
|
||||||
|
if(imgOutputFile.seek(10)){
|
||||||
|
imgOutputFile.read((char *)&dataoffset, 4);
|
||||||
|
}else{
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Move by dataoffset bytes
|
||||||
|
if(!imgOutputFile.seek(dataoffset)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QProgressDialog progress("Embedding Data", "Cancel", 0, inputFileSize, this);
|
||||||
|
progress.show();
|
||||||
|
unsigned int progresscount=0;
|
||||||
|
unsigned int countBytes=0;
|
||||||
|
while (!inputFile.atEnd()){
|
||||||
|
//Read a byte
|
||||||
|
unsigned char dataByte=0;
|
||||||
|
inputFile.getChar((char *)&dataByte);
|
||||||
|
|
||||||
|
//Store each bit of the data byte in 1 byte of the image pixel
|
||||||
|
//starting with the MSB
|
||||||
|
for(int i=7; i>=0; i--){
|
||||||
|
//Get the bit at position i in the data byte
|
||||||
|
unsigned char checkByte= 0x01;
|
||||||
|
checkByte= checkByte<<i;
|
||||||
|
unsigned char dataBit=(dataByte & checkByte)>>i;
|
||||||
|
|
||||||
|
unsigned char imageByte=0;
|
||||||
|
//To ignore the padding bytes
|
||||||
|
if(countBytes>=width*3){
|
||||||
|
countBytes= 0;
|
||||||
|
//Advance the read pointer
|
||||||
|
for(int j=0; j<padding; j++){
|
||||||
|
imgOutputFile.getChar((char *)&imageByte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Get a pixel byte from the bitmap
|
||||||
|
imgOutputFile.getChar((char *)&imageByte);
|
||||||
|
//Get the LSB
|
||||||
|
checkByte= imageByte & 0x01;
|
||||||
|
//Check if the databit and the LSB is different
|
||||||
|
if(dataBit!=checkByte){
|
||||||
|
//Alter the LSB to the databit
|
||||||
|
if(dataBit){
|
||||||
|
//If 1 set the LSB
|
||||||
|
imageByte= imageByte | 0x01;
|
||||||
|
}else{
|
||||||
|
//Reset the LSB
|
||||||
|
imageByte= imageByte & 0xFE;
|
||||||
|
}
|
||||||
|
//Get the current pointer position
|
||||||
|
int pos= imgOutputFile.pos();
|
||||||
|
//Put it back by 1 byte to write the current byte
|
||||||
|
if(!imgOutputFile.seek(pos-1)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Write the byte
|
||||||
|
imgOutputFile.putChar(imageByte);
|
||||||
|
}
|
||||||
|
countBytes++;
|
||||||
|
}
|
||||||
|
progresscount++;
|
||||||
|
progress.setValue(progresscount);
|
||||||
|
if (progress.wasCanceled()){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Operation Aborted.");
|
||||||
|
imgOutputFile.close();
|
||||||
|
inputFile.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
progress.hide();
|
||||||
|
//Close the files
|
||||||
|
imgOutputFile.close();
|
||||||
|
inputFile.close();
|
||||||
|
|
||||||
|
QMessageBox::information(this, "StegoSaurus", "Data Embedded Successfully.");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//The recover methods
|
||||||
|
void StegoSaurus::on_btnRecover_clicked()
|
||||||
|
{
|
||||||
|
//Get the filename
|
||||||
|
QString imgFileName= ui.txtWetImg->text();
|
||||||
|
|
||||||
|
//Check image file has been selected
|
||||||
|
if(imgFileName.isEmpty()){
|
||||||
|
QMessageBox::information(this, "StegoSaurus", "Please select a bitmap image.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString targetFileName="/home/";
|
||||||
|
targetFileName= QFileDialog::getSaveFileName(this, "Save recovered data to", targetFileName, "All Files(*.*)");
|
||||||
|
|
||||||
|
if(targetFileName.isEmpty())return;
|
||||||
|
|
||||||
|
//If a file with the same name exists delete it
|
||||||
|
QFile::remove(targetFileName);
|
||||||
|
|
||||||
|
//Calculate the no. of padding bytes
|
||||||
|
unsigned int width= wetImage->width();
|
||||||
|
unsigned int padding=0;
|
||||||
|
if((width*3)%4==0)
|
||||||
|
padding=0;
|
||||||
|
unsigned int quotient= (width*3)/4;
|
||||||
|
padding= 4*(quotient+1)- width*3;
|
||||||
|
|
||||||
|
/////////////////////////////////Recover the data////////////////////////////////////////////
|
||||||
|
QFile targetFile(targetFileName);
|
||||||
|
if (!targetFile.open(QIODevice::WriteOnly)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to open data file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QFile imgInputFile(imgFileName);
|
||||||
|
if (!imgInputFile.open(QIODevice::ReadOnly)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to open bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Read the dataoffset of the bitmap
|
||||||
|
unsigned int dataoffset=0;
|
||||||
|
if(imgInputFile.seek(10)){
|
||||||
|
imgInputFile.read((char *)&dataoffset, 4);
|
||||||
|
}else{
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Move by dataoffset bytes
|
||||||
|
if(!imgInputFile.seek(dataoffset)){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QProgressDialog progress("Recovering Data", "Cancel", 0, sizeofData, this);
|
||||||
|
progress.show();
|
||||||
|
unsigned int progresscount=0;
|
||||||
|
unsigned int countBytes=0;
|
||||||
|
//Iterate to recover targetFileSize bytes
|
||||||
|
for(unsigned int byteNo= 0; byteNo< sizeofData; byteNo++){
|
||||||
|
//construct each byte
|
||||||
|
unsigned char dataByte= 0x00;
|
||||||
|
for(int bitNo=7; bitNo>=0; bitNo--){
|
||||||
|
unsigned char imageByte=0xFF;
|
||||||
|
//To ignore the padding bytes
|
||||||
|
if(countBytes>=width*3){
|
||||||
|
countBytes= 0;
|
||||||
|
//Advance the read pointer
|
||||||
|
for(int j=0; j<padding; j++){
|
||||||
|
imgInputFile.getChar((char *)&imageByte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Read a byte from the bitmap file
|
||||||
|
imgInputFile.getChar((char *)&imageByte);
|
||||||
|
countBytes++;
|
||||||
|
//Get the LSB
|
||||||
|
unsigned char dataBit= imageByte & 0x01;
|
||||||
|
//Set the bit in data byte at bitNo position if databit is set
|
||||||
|
if(dataBit){
|
||||||
|
unsigned char tempByte= 0x01;
|
||||||
|
dataByte= dataByte | (tempByte<<bitNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Write the byte
|
||||||
|
targetFile.putChar(dataByte);
|
||||||
|
|
||||||
|
//Update the progressbar
|
||||||
|
progresscount++;
|
||||||
|
progress.setValue(progresscount);
|
||||||
|
if (progress.wasCanceled()){
|
||||||
|
QMessageBox::warning(this, "StegoSaurus", "Operation Aborted.");
|
||||||
|
imgInputFile.close();
|
||||||
|
targetFile.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
progress.hide();
|
||||||
|
//Close the files
|
||||||
|
targetFile.close();
|
||||||
|
imgInputFile.close();
|
||||||
|
|
||||||
|
QMessageBox::information(this, "StegoSaurus", "Data Recovery Successful.");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
***************************Author: Agnit Sarkar******************************
|
||||||
|
**************************CopyRight: April 2009******************************
|
||||||
|
********************* Email: agnitsarkar@yahoo.co.uk*************************
|
||||||
|
****************************************************************************/
|
||||||
|
#ifndef STEGOSAURUS_H
|
||||||
|
#define STEGOSAURUS_H
|
||||||
|
|
||||||
|
#include <QtGui>
|
||||||
|
#include "ui_stegosaurus.h"
|
||||||
|
|
||||||
|
class StegoSaurus : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
StegoSaurus(QWidget *parent = 0, Qt::WFlags flags = 0);
|
||||||
|
~StegoSaurus();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void dragEnterEvent(QDragEnterEvent *event);
|
||||||
|
void dropEvent(QDropEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void resizeEvent ( QResizeEvent *);
|
||||||
|
Ui::StegoSaurusClass ui;
|
||||||
|
QImage *dryImage, *wetImage;
|
||||||
|
unsigned int bitsAvailable, inputFileSize, sizeofData;
|
||||||
|
|
||||||
|
void setDryImage(const QString &);
|
||||||
|
void setWetImage(const QString &);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
void on_btnWetImg_clicked();
|
||||||
|
void on_btnFiletoHide_clicked();
|
||||||
|
void on_btnDryImg_clicked();
|
||||||
|
|
||||||
|
//The hide method
|
||||||
|
void on_btnHide_clicked();
|
||||||
|
//The recover method
|
||||||
|
void on_btnRecover_clicked();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // STEGOSAURUS_H
|
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
@ -0,0 +1,9 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/StegoSaurus" >
|
||||||
|
<file>images/stegosaurus-128x128.png</file>
|
||||||
|
<file>images/stegosaurus-16x16.png</file>
|
||||||
|
<file>images/stegosaurus-256x256.png</file>
|
||||||
|
<file>images/stegosaurus-32x32.png</file>
|
||||||
|
<file>images/stegosaurus-48x48.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
1615
retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui
Normal file
1615
retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,29 @@
|
|||||||
|
#=== this part is common (similar) for all plugin projects =====================
|
||||||
|
TEMPLATE = lib
|
||||||
|
CONFIG += plugin release
|
||||||
|
|
||||||
|
# this is directory, where PluginInterface.h is located
|
||||||
|
INCLUDEPATH += ../
|
||||||
|
|
||||||
|
# and, the result (*.so or *.dll) should appear in this directory
|
||||||
|
DESTDIR = ../bin
|
||||||
|
OBJECTS_DIR = temp/obj
|
||||||
|
RCC_DIR = temp/qrc
|
||||||
|
UI_DIR = temp/ui
|
||||||
|
MOC_DIR = temp/moc
|
||||||
|
|
||||||
|
|
||||||
|
# the name of the result file;
|
||||||
|
TARGET = $$qtLibraryTarget(stegosaurus_plugin)
|
||||||
|
|
||||||
|
HEADERS += ../PluginInterface.h \
|
||||||
|
StegoSaurusPlugin.h
|
||||||
|
SOURCES += StegoSaurusPlugin.cpp
|
||||||
|
|
||||||
|
#===============================================================================
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += resource.h resource1.h stegosaurus.h
|
||||||
|
FORMS += stegosaurus.ui
|
||||||
|
SOURCES += main.cpp stegosaurus.cpp
|
||||||
|
RESOURCES += stegosaurus.qrc
|
Loading…
Reference in New Issue
Block a user