bazaar: DeEncrypter, an AESStream bases app, small key generater & Encrypter / Decrypter for multiple files

git-svn-id: svn://ultimatepp.org/upp/trunk@2594 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
kohait 2010-08-05 19:01:00 +00:00
parent 45cc282c45
commit 1b6abbdbe4
6 changed files with 259 additions and 0 deletions

View file

@ -0,0 +1,38 @@
#ifndef _DeEncrypter_DeEncrypter_h
#define _DeEncrypter_DeEncrypter_h
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
#define LAYOUTFILE <DeEncrypter/DeEncrypter.lay>
#include <CtrlCore/lay.h>
#include <AESStream/AESStream.h>
#define DEFKEYSIZE 32
#define DEFFILENAME "aes" ASSTRING(DEFKEYSIZE) ".key"
#define BUFFSIZE (512*1024)
class DeEncrypter : public WithDeEncrypterLayout<TopWindow> {
public:
typedef DeEncrypter CLASSNAME;
DeEncrypter();
void ToInfo(const String & s)
{
info.Insert(info.GetLength(), s + "\n");
info.SetCursor(info.GetLength());
}
void Crypt(bool encrypt = true);
void Generate();
void OpenKey();
FileSel fs;
FileSel dirs;
String key;
};
#endif

View file

@ -0,0 +1,10 @@
LAYOUT(DeEncrypterLayout, 404, 276)
ITEM(EditString, keypath, AlignRight(true).SetEditable(false).HSizePosZ(168, 64).TopPosZ(4, 19))
ITEM(Label, dv___1, SetLabel(t_("KeyFile")).HCenterPosZ(60, -68).TopPosZ(4, 19))
ITEM(Button, open, SetLabel(t_("Open Key")).RightPosZ(4, 56).TopPosZ(4, 19))
ITEM(Button, generate, SetLabel(t_("Generate Key")).LeftPosZ(4, 96).TopPosZ(4, 20))
ITEM(DocEdit, info, HSizePosZ(4, 4).VSizePosZ(56, 4))
ITEM(Button, decrypt, SetLabel(t_("Decrypt some Files")).RightPosZ(4, 196).TopPosZ(28, 24))
ITEM(Button, encrypt, SetLabel(t_("Encrypt some Files")).LeftPosZ(4, 196).TopPosZ(28, 24))
END_LAYOUT

View file

@ -0,0 +1,15 @@
description "a simple little gui that makes it possible to decrypt or encrypt stuff, using AESStream\377";
uses
CtrlLib,
AESStream;
file
DeEncrypter.h,
main.cpp,
DeEncrypter.lay,
src.tpp;
mainconfig
"" = "GUI MT";

5
bazaar/DeEncrypter/init Normal file
View file

@ -0,0 +1,5 @@
#ifndef _DeEncrypter_icpp_init_stub
#define _DeEncrypter_icpp_init_stub
#include "CtrlLib/init"
#include "AESStream/init"
#endif

179
bazaar/DeEncrypter/main.cpp Normal file
View file

@ -0,0 +1,179 @@
#include "DeEncrypter.h"
DeEncrypter::DeEncrypter()
{
CtrlLayout(*this, "Window title");
String activedir = GetFileFolder(GetExeFilePath());
fs.ActiveDir(activedir);
dirs.ActiveDir(activedir);
encrypt << THISBACK1(Crypt, true);
decrypt << THISBACK1(Crypt, false);
generate << THISBACK(Generate);
open << THISBACK(OpenKey);
//try preload an existing key
String filename = activedir + DIR_SEP + DEFFILENAME;
key = LoadFile(filename);
if(key.IsEmpty())
{
ToInfo("Choose or Generate key");
return;
}
if(key.GetLength() > DEFKEYSIZE)
{
ToInfo("Could not open key " + filename);
key.Clear();
keypath.Clear();
}
else
{
ToInfo("Key opened from file " + filename);
keypath.SetData(filename);
}
}
void DeEncrypter::Crypt(bool encrypt)
{
if(key.IsEmpty())
{
ToInfo("No Key selected");
return;
}
fs.Multi();
fs.ClearTypes();
if(!fs.ExecuteOpen(String().Cat() << "Select files to " << ((encrypt)?("ENcrypt"):("DEcrypt")) ))
{
ToInfo("Canceled");
return;
}
if(!dirs.ExecuteSelectDir(String().Cat() << "Select directory where to put " << ((encrypt)?("ENcrypted"):("DEcrypted")) << " files (same file name used)"))
{
ToInfo("Canceled");
return;
}
String dir = dirs.Get();
Progress pi;
pi.Create();
for(int i = 0; i < fs.GetCount(); i++)
{
String filename = fs.GetFile(i);
ToInfo("\n\nProcessing: " + filename);
String sIn;
sIn = LoadFile(filename);
if(sIn.IsEmpty())
{
ToInfo("!!! ERR: Could not load: " + filename);
continue;
}
else
ToInfo("File loaded: " + filename);
String sOut;
if(0)
sOut = sIn;
else
{
int total = (sIn.GetLength()/BUFFSIZE) + 1;
pi.SetTotal(total);
if(encrypt)
{
pi.SetText("Encrypting: " + filename);
AESEncoderStream aesEncoder(sIn.GetLength(), key);
for(int i = 0; i < sIn.GetLength();)
{
aesEncoder << sIn.Mid(i, BUFFSIZE);
sOut << aesEncoder;
i+=BUFFSIZE;
pi.Step();
}
}
else
{
pi.SetText("Decrypting: " + filename);
AESDecoderStream aesDecoder(key);
for(int i = 0; i < sIn.GetLength();)
{
aesDecoder << sIn.Mid(i, BUFFSIZE);
sOut << aesDecoder;
i+=BUFFSIZE;
pi.Step();
}
}
}
filename = dir + DIR_SEP + GetFileName(filename);
if(!SaveFile(filename, sOut))
ToInfo("!!! ERR: Could not save: " + filename);
else
ToInfo(">> saved to " + filename);
}
pi.Close();
}
void DeEncrypter::Generate()
{
fs.Multi(false);
fs.Types("All Files\t*\nKey Files\t*.key\nDat Files\t*.dat\n");
fs.Set(DEFFILENAME);
if(!fs.ExecuteSaveAs("Save new key to"))
return;
String filename = fs.Get();
key = AESRandomString(DEFKEYSIZE);
if(!SaveFile(filename, key))
{
ToInfo("Could not save file " + filename);
key.Clear();
keypath.Clear();
return;
}
ToInfo("New key in file " + filename);
keypath.SetData(filename);
}
void DeEncrypter::OpenKey()
{
fs.Multi(false);
fs.Types("All Files\t*\nKey Files\t*.key\nDat Files\t*.dat\n");
fs.Set("aes32");
if(!fs.ExecuteOpen("Open key from"))
return;
String filename = fs.Get();
key = LoadFile(filename);
if(key.IsEmpty() || key.GetLength() > DEFKEYSIZE)
{
ToInfo("Could not open key " + filename);
key.Clear();
keypath.Clear();
return;
}
ToInfo("Key opened from file " + filename);
keypath.SetData(filename);
}
GUI_APP_MAIN
{
DeEncrypter().Run();
}

View file

@ -0,0 +1,12 @@
topic "This is a small tool to encrypt and decrypt files and generate random aes keys.";
[ $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9; $$1,0#37138531426314131252341829483380:structitem]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[{_}%EN-US
[s0; This is a small tool to encrypt and decrypt files and generate
random aes keys.&]
[s0; it uses default key size 32 byte (256 bit).&]
[s0; &]
[s0; known issue: files > 200 MB produce an `'Out of Memory`'...maybe
because of the heap allocator in Upp.]