diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc
new file mode 100644
index 000000000..01b710c0a
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc
@@ -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
+
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.vcproj b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.vcproj
new file mode 100644
index 000000000..8460fb99f
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.vcproj
@@ -0,0 +1,469 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.cpp b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.cpp
new file mode 100644
index 000000000..91f9bb5ab
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.cpp
@@ -0,0 +1,32 @@
+//#include
+//#include
+//#include
+
+#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)
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.h b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.h
new file mode 100644
index 000000000..952d7485d
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.h
@@ -0,0 +1,27 @@
+#ifndef _STEGOSAURUS_PLUGIN_H_
+#define _STEGOSAURUS_PLUGIN_H_
+
+#include
+
+#include
+#include
+
+#include
+
+#include
+
+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
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/Thumbs.db b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/Thumbs.db
new file mode 100644
index 000000000..d105b265a
Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/Thumbs.db differ
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-128x128.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-128x128.png
new file mode 100644
index 000000000..b89abe308
Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-128x128.png differ
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-16x16.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-16x16.png
new file mode 100644
index 000000000..ebc99d621
Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-16x16.png differ
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-256x256.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-256x256.png
new file mode 100644
index 000000000..96e6e080a
Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-256x256.png differ
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-32x32.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-32x32.png
new file mode 100644
index 000000000..2954b2013
Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-32x32.png differ
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-48x48.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-48x48.png
new file mode 100644
index 000000000..262b469cc
Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-48x48.png differ
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp
new file mode 100644
index 000000000..232cf924e
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp
@@ -0,0 +1,15 @@
+/****************************************************************************
+***************************Author: Agnit Sarkar******************************
+**************************CopyRight: April 2009******************************
+********************* Email: agnitsarkar@yahoo.co.uk*************************
+****************************************************************************/
+#include
+#include "stegosaurus.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ StegoSaurus w;
+ w.show();
+ return a.exec();
+}
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h
new file mode 100644
index 000000000..d5b430124
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h
@@ -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
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource1.h b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource1.h
new file mode 100644
index 000000000..fb80c0dda
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource1.h
@@ -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
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.cpp b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.cpp
new file mode 100644
index 000000000..6a00261e7
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.cpp
@@ -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("Drag Image Here
OR
Select it by browsing
(BMP Images only)
");
+ 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("Drag Image Here
OR
Select it by browsing
(BMP Images only)
");
+ 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 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 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 imageByte=0;
+ //To ignore the padding bytes
+ if(countBytes>=width*3){
+ countBytes= 0;
+ //Advance the read pointer
+ for(int j=0; jtext();
+
+ //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
+#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
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ico b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ico
new file mode 100644
index 000000000..5b5d38a89
Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ico differ
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.qrc b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.qrc
new file mode 100644
index 000000000..32b23abbb
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.qrc
@@ -0,0 +1,9 @@
+
+
+ images/stegosaurus-128x128.png
+ images/stegosaurus-16x16.png
+ images/stegosaurus-256x256.png
+ images/stegosaurus-32x32.png
+ images/stegosaurus-48x48.png
+
+
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui
new file mode 100644
index 000000000..7bb9f9308
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui
@@ -0,0 +1,1615 @@
+
+
+ StegoSaurusClass
+
+
+
+ 0
+ 0
+ 599
+ 451
+
+
+
+ false
+
+
+ StegoSaurus 1.0
+
+
+
+ :/StegoSaurus/images/stegosaurus-16x16.png:/StegoSaurus/images/stegosaurus-16x16.png
+
+
+ -
+
+
+ false
+
+
+ 0
+
+
+
+ Hide
+
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ true
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:x-large;">Drag Image Here<br /><br />OR<br /><br />Select it by browsing<br /><br />(BMP Images only)</span></p></body></html>
+
+
+ true
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+ :/StegoSaurus/images/stegosaurus-256x256.png
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Bitmap Image
+
+
+
+ -
+
+
+ false
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">The path of the dry image</span></p></body></html>
+
+
+
+ -
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Select the dry image</span></p></body></html>
+
+
+ Browse
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Shows dry image info</span></p></body></html>
+
+
+ QFrame::StyledPanel
+
+
+ No image loaded
+
+
+
+ -
+
+
+ File to Embed
+
+
+
+ -
+
+
+ false
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Path of the file to be hidden</span></p></body></html>
+
+
+
+ -
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Select the file to be hidden</span></p></body></html>
+
+
+ Browse
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Shows file info</span></p></body></html>
+
+
+ QFrame::StyledPanel
+
+
+ No file loaded
+
+
+
+ -
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Hit this to hide the file into the bitmap image</span></p></body></html>
+
+
+ Hide Data
+
+
+
+
+
+
+
+ Recover
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ true
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:x-large;">Drag Image Here<br /><br />OR<br /><br />Select it by browsing<br /><br />(BMP Images only)</span></p></body></html>
+
+
+ true
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+ :/StegoSaurus/images/stegosaurus-256x256.png
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Bitmap Image
+
+
+
+ -
+
+
+ false
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:12pt; font-weight:600;">The path of the wet image</span></p></body></html>
+
+
+
+ -
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:11pt; font-weight:600;">Select the wet image</span></p></body></html>
+
+
+ Browse
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Shows wet image info</span></p></body></html>
+
+
+ QFrame::StyledPanel
+
+
+ No image loaded
+
+
+
+ -
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Hit this to recover data from the bitmap image</span></p></body></html>
+
+
+ Recover Data
+
+
+
+
+
+
+
+ About
+
+
+ -
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ 255
+ 255
+ 220
+
+
+
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ true
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/StegoSaurus/images/stegosaurus-128x128.png" /></p>
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600; color:#5500ff;">Stegosaurus v 1.0</span></p>
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; color:#5500ff;">Designed by:</span></p>
+<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; color:#5500ff;"></p>
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600; color:#5500ff;">Agnit Sarkar</span></p>
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; color:#5500ff;">(April 2009)</span></p>
+<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; color:#5500ff;"></p>
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; color:#5500ff;">Email:</span></p>
+<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; color:#5500ff;"></p>
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:agnitsarkar@yahoo.co.uk"><span style=" font-size:12pt; text-decoration: underline; color:#5500ff;">agnitsarkar@yahoo.co.uk</span></a></p>
+<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-style:italic; color:#5500ff;"></p></body></html>
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus_plugin.pro b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus_plugin.pro
new file mode 100644
index 000000000..1b67fe78f
--- /dev/null
+++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus_plugin.pro
@@ -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