Overwrite session key on exit
Fix some compiler warnings git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@248 b624d157-de02-0410-bad0-e51aec6abb33
This commit is contained in:
parent
2ecca449a4
commit
0afbf7b534
|
@ -35,7 +35,7 @@ bool KeepassApplication::x11EventFilter(XEvent* event){
|
||||||
autoTypeGlobal->maskAltGr() | autoTypeGlobal->maskMeta();
|
autoTypeGlobal->maskAltGr() | autoTypeGlobal->maskMeta();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->type==KeyPress && autoType->getShortcut().key!=0u &&
|
if (event->type==KeyPress && autoType->getShortcut().key!=0 &&
|
||||||
event->xkey.keycode == XKeysymToKeycode(event->xkey.display,HelperX11::getKeysym(autoType->getShortcut().key)) &&
|
event->xkey.keycode == XKeysymToKeycode(event->xkey.display,HelperX11::getKeysym(autoType->getShortcut().key)) &&
|
||||||
(event->xkey.state&remove_invalid) == HelperX11::getShortcutModifierMask(autoType->getShortcut()) &&
|
(event->xkey.state&remove_invalid) == HelperX11::getShortcutModifierMask(autoType->getShortcut()) &&
|
||||||
focusWidget()==NULL)
|
focusWidget()==NULL)
|
||||||
|
|
|
@ -18,12 +18,12 @@
|
||||||
|
|
||||||
#include "arcfour.h"
|
#include "arcfour.h"
|
||||||
|
|
||||||
void CArcFour::setKey(quint8* key, int length){
|
void CArcFour::setKey(quint8* key, uint length){
|
||||||
RawKey = key;
|
RawKey = key;
|
||||||
RawKeyLength = length;
|
RawKeyLength = length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArcFour::encrypt(const quint8* src, quint8* dst, int length){
|
void CArcFour::encrypt(const quint8* src, quint8* dst, uint length){
|
||||||
quint8 S[256];
|
quint8 S[256];
|
||||||
quint32 w;
|
quint32 w;
|
||||||
|
|
||||||
|
|
|
@ -21,13 +21,13 @@
|
||||||
|
|
||||||
class CArcFour{
|
class CArcFour{
|
||||||
public:
|
public:
|
||||||
void encrypt(const quint8* src, quint8* dst, int length);
|
void encrypt(const quint8* src, quint8* dst, uint length);
|
||||||
inline void decrypt(const quint8* src, quint8* dst, int length){encrypt(src,dst,length);} //just for readability
|
inline void decrypt(const quint8* src, quint8* dst, uint length){encrypt(src,dst,length);} //just for readability
|
||||||
void setKey(quint8* key, int length);
|
void setKey(quint8* key, uint length);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
quint8* RawKey;
|
quint8* RawKey;
|
||||||
int RawKeyLength;
|
uint RawKeyLength;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -425,7 +425,7 @@ void randomize(void* buffer, unsigned int length){
|
||||||
|
|
||||||
void strongRandomize(void* buffer, unsigned int length){
|
void strongRandomize(void* buffer, unsigned int length){
|
||||||
Q_ASSERT(yarrow256_is_seeded(&StrongCtx));
|
Q_ASSERT(yarrow256_is_seeded(&StrongCtx));
|
||||||
for(int i=0; i<length;i++)
|
for(uint i=0; i<length;i++)
|
||||||
yarrow256_random(&StrongCtx,1,(quint8*)buffer+i);
|
yarrow256_random(&StrongCtx,1,(quint8*)buffer+i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ void AutoTypeGlobalX11::windowTitles(Window window, QStringList& titleList){
|
||||||
unsigned int num_children;
|
unsigned int num_children;
|
||||||
int tree = XQueryTree(dpy, window, &root, &parent, &children, &num_children);
|
int tree = XQueryTree(dpy, window, &root, &parent, &children, &num_children);
|
||||||
if (tree && children){
|
if (tree && children){
|
||||||
for (int i=0; i<num_children; i++)
|
for (uint i=0; i<num_children; i++)
|
||||||
windowTitles(children[i], titleList);
|
windowTitles(children[i], titleList);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -220,7 +220,7 @@ bool AutoTypeGlobalX11::registerGlobalShortcut(const Shortcut& s){
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
int code=XKeysymToKeycode(dpy, HelperX11::getKeysym(s.key));
|
int code=XKeysymToKeycode(dpy, HelperX11::getKeysym(s.key));
|
||||||
int mod=HelperX11::getShortcutModifierMask(s);
|
uint mod=HelperX11::getShortcutModifierMask(s);
|
||||||
|
|
||||||
HelperX11::startCatchErrors();
|
HelperX11::startCatchErrors();
|
||||||
XGrabKey(dpy, code, mod, windowRoot, true, GrabModeAsync, GrabModeAsync);
|
XGrabKey(dpy, code, mod, windowRoot, true, GrabModeAsync, GrabModeAsync);
|
||||||
|
@ -247,7 +247,7 @@ void AutoTypeGlobalX11::unregisterGlobalShortcut(){
|
||||||
if (shortcut.key==0) return;
|
if (shortcut.key==0) return;
|
||||||
|
|
||||||
int code=XKeysymToKeycode(dpy, HelperX11::getKeysym(shortcut.key));
|
int code=XKeysymToKeycode(dpy, HelperX11::getKeysym(shortcut.key));
|
||||||
int mod=HelperX11::getShortcutModifierMask(shortcut);
|
uint mod=HelperX11::getShortcutModifierMask(shortcut);
|
||||||
|
|
||||||
XUngrabKey(dpy, code, mod, windowRoot);
|
XUngrabKey(dpy, code, mod, windowRoot);
|
||||||
XUngrabKey(dpy, code, mod | Mod2Mask, windowRoot);
|
XUngrabKey(dpy, code, mod | Mod2Mask, windowRoot);
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
#ifdef GLOBAL_AUTOTYPE
|
#ifdef GLOBAL_AUTOTYPE
|
||||||
#include "AutoTypeGlobalX11.h"
|
#include "AutoTypeGlobalX11.h"
|
||||||
|
|
||||||
int HelperX11::getShortcutModifierMask(const Shortcut& s){
|
uint HelperX11::getShortcutModifierMask(const Shortcut& s){
|
||||||
AutoTypeGlobalX11* autoTypeGlobal = static_cast<AutoTypeGlobalX11*>(autoType);
|
AutoTypeGlobalX11* autoTypeGlobal = static_cast<AutoTypeGlobalX11*>(autoType);
|
||||||
|
|
||||||
int mod = 0;
|
uint mod = 0;
|
||||||
if (s.ctrl) mod |= ControlMask;
|
if (s.ctrl) mod |= ControlMask;
|
||||||
if (s.shift) mod |= ShiftMask;
|
if (s.shift) mod |= ShiftMask;
|
||||||
if (s.alt) mod |= autoTypeGlobal->maskAlt();
|
if (s.alt) mod |= autoTypeGlobal->maskAlt();
|
||||||
|
|
|
@ -34,7 +34,7 @@ class HelperX11{
|
||||||
public:
|
public:
|
||||||
static KeySym getKeysym(const QChar& c);
|
static KeySym getKeysym(const QChar& c);
|
||||||
#ifdef GLOBAL_AUTOTYPE
|
#ifdef GLOBAL_AUTOTYPE
|
||||||
static int getShortcutModifierMask(const Shortcut& s);
|
static uint getShortcutModifierMask(const Shortcut& s);
|
||||||
#endif
|
#endif
|
||||||
static unsigned int keyboardModifiers(Display* d);
|
static unsigned int keyboardModifiers(Display* d);
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
CArcFour SecString::RC4;
|
CArcFour SecString::RC4;
|
||||||
|
quint8* SecString::sessionkey;
|
||||||
|
|
||||||
SecString::operator QString(){
|
SecString::operator QString(){
|
||||||
return string();
|
return string();
|
||||||
|
@ -88,17 +88,21 @@ void SecString::overwrite(QString& str){
|
||||||
if(str.length()==0)
|
if(str.length()==0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for(int i=0; i<str.length(); i++)
|
overwrite((unsigned char*)str.data(), str.capacity());
|
||||||
((char*)str.data())[i] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SecString::generateSessionKey(){
|
void SecString::generateSessionKey(){
|
||||||
quint8* sessionkey = new quint8[32];
|
sessionkey = new quint8[32];
|
||||||
lockPage(sessionkey, 32);
|
lockPage(sessionkey, 32);
|
||||||
randomize(sessionkey, 32);
|
randomize(sessionkey, 32);
|
||||||
RC4.setKey(sessionkey, 32);
|
RC4.setKey(sessionkey, 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SecString::deleteSessionKey() {
|
||||||
|
overwrite(sessionkey, 32);
|
||||||
|
delete[] sessionkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SecData::SecData(int len) : locked(true){
|
SecData::SecData(int len) : locked(true){
|
||||||
length = len;
|
length = len;
|
||||||
|
@ -110,7 +114,7 @@ SecData::~SecData(){
|
||||||
for (int i=0; i<length; i++)
|
for (int i=0; i<length; i++)
|
||||||
data[i] = 0;
|
data[i] = 0;
|
||||||
}
|
}
|
||||||
delete data;
|
delete[] data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SecData::lock(){
|
void SecData::lock(){
|
||||||
|
|
|
@ -52,9 +52,11 @@ public:
|
||||||
static void overwrite(unsigned char* str,int len);
|
static void overwrite(unsigned char* str,int len);
|
||||||
static void overwrite(QString& str);
|
static void overwrite(QString& str);
|
||||||
static void generateSessionKey();
|
static void generateSessionKey();
|
||||||
|
static void deleteSessionKey();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static CArcFour RC4;
|
static CArcFour RC4;
|
||||||
|
static quint8* sessionkey;
|
||||||
bool locked;
|
bool locked;
|
||||||
QByteArray crypt;
|
QByteArray crypt;
|
||||||
QString plain;
|
QString plain;
|
||||||
|
|
|
@ -157,6 +157,7 @@ int main(int argc, char **argv)
|
||||||
delete eventListener;
|
delete eventListener;
|
||||||
|
|
||||||
fileDlgHistory.save();
|
fileDlgHistory.save();
|
||||||
|
SecString::deleteSessionKey();
|
||||||
delete app;
|
delete app;
|
||||||
delete config;
|
delete config;
|
||||||
return r;
|
return r;
|
||||||
|
|
Loading…
Reference in New Issue