4
0
mirror of https://github.com/QuasarApp/qca.git synced 2025-05-10 09:49:33 +00:00

new KeyStoreInfo class to hold details for asker

svn path=/trunk/kdesupport/qca/; revision=658130
This commit is contained in:
Justin Karneges 2007-04-26 01:55:37 +00:00
parent 95b5a54358
commit 8b7b7295b9
8 changed files with 111 additions and 64 deletions
examples/eventhandlerdemo
include/QtCrypto
plugins
qca-gnupg
qca-pkcs11
src
tools/qcatool

@ -147,7 +147,7 @@ void asker_procedure()
QCA::TokenAsker tokenAsker;
tokenAsker.ask( QString( "Token 1" ), QString ( "My Token" ), QCA::KeyStoreEntry(), 0 );
tokenAsker.ask( KeyStoreInfo( QCA::KeyStore::SmartCard, "Token Id", "Token Name" ), QCA::KeyStoreEntry(), 0 );
tokenAsker.waitForResponse();

@ -69,6 +69,7 @@ namespace QCA
class Global;
class KeyStore;
class KeyStoreEntry;
class KeyStoreInfo;
class KeyStoreManager;
class Logger;
@ -1103,7 +1104,7 @@ namespace QCA
\sa source()
\sa fileName() for the name, if source is Event::Data
\sa keyStoreId() and keyStoreEntry() for the keystore and entry, if
\sa keyStoreInfo() and keyStoreEntry() for the keystore and entry, if
the source is Event::KeyStore
*/
enum Source
@ -1176,18 +1177,11 @@ namespace QCA
PasswordStyle passwordStyle() const;
/**
The id of the KeyStore associated with this event
The info of the KeyStore associated with this event
This is not meaningful unless the Source is KeyStore.
*/
QString keyStoreId() const;
/**
The name of the KeyStore associated with this event
This is not meaningful unless the Source is KeyStore.
*/
QString keyStoreName() const;
KeyStoreInfo keyStoreInfo() const;
/**
The KeyStoreEntry associated with this event
@ -1215,11 +1209,11 @@ namespace QCA
This creates a Password type event, for a keystore.
\param pstyle the style of information required (e.g. PIN, password or passphrase)
\param keyStoreId the keystore that the information is required for
\param keyStoreInfo info about the keystore that the information is required for
\param keyStoreEntry the entry in the keystore that the information is required for
\param ptr opaque data
*/
void setPasswordKeyStore(PasswordStyle pstyle, const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr);
void setPasswordKeyStore(PasswordStyle pstyle, const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr);
/**
Set the values for this Event
@ -1237,11 +1231,11 @@ namespace QCA
This creates a Token type event.
\param keyStoreId the keystore that the token is required for
\param keyStoreInfo info about the keystore that the token is required for
\param keyStoreEntry the entry in the keystore that the token is required for
\param ptr opaque data
*/
void setToken(const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr);
void setToken(const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr);
private:
class Private;
@ -1350,11 +1344,11 @@ namespace QCA
queue a password / passphrase request associated with a key store
\param pstyle the type of information required (e.g. PIN, passphrase or password)
\param keyStoreId the key store that the information is required for
\param keyStoreInfo info of the key store that the information is required for
\param keyStoreEntry the item in the key store that the information is required for (if applicable)
\param ptr opaque data
*/
void ask(Event::PasswordStyle pstyle, const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr);
void ask(Event::PasswordStyle pstyle, const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr);
/**
queue a password / passphrase request associated with a file
@ -1430,11 +1424,11 @@ namespace QCA
/**
queue a token request associated with a key store
\param keyStoreId the key store that the information is required for
\param keyStoreInfo info of the key store that the information is required for
\param keyStoreEntry the item in the key store that the information is required for (if applicable)
\param ptr opaque data
*/
void ask(const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr);
void ask(const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr);
/**
Cancel the pending password / passphrase request

@ -509,6 +509,27 @@ namespace QCA
friend class KeyStoreManagerPrivate;
};
// holds key store information outside of a keystore object
class QCA_EXPORT KeyStoreInfo
{
public:
KeyStoreInfo();
KeyStoreInfo(KeyStore::Type type, const QString &id, const QString &name);
KeyStoreInfo(const KeyStoreInfo &from);
~KeyStoreInfo();
KeyStoreInfo & operator=(const KeyStoreInfo &from);
bool isNull() const;
KeyStore::Type type() const;
QString id() const;
QString name() const;
private:
class Private;
QSharedDataPointer<Private> d;
};
/**
\class KeyStoreManager qca_keystore.h QtCrypto

@ -824,7 +824,7 @@ public:
if(c)
kse.change(c);
asker.ask(Event::StylePassphrase, keyStoreList->storeId(0), keyStoreList->name(0), kse, 0);
asker.ask(Event::StylePassphrase, KeyStoreInfo(KeyStore::PGPKeyring, keyStoreList->storeId(0), keyStoreList->name(0)), kse, 0);
asker.waitForResponse();
global_gpg = &gpg;
keyStoreList->submitPassphrase(0, 0, asker.password());

@ -1890,8 +1890,7 @@ pkcs11KeyStoreListContext::tokenPrompt (
TokenAsker asker;
asker.ask (
storeId,
storeName,
KeyStoreInfo (KeyStore::SmartCard, storeId, storeName),
entry,
context
);
@ -1949,8 +1948,7 @@ pkcs11KeyStoreListContext::pinPrompt (
PasswordAsker asker;
asker.ask (
Event::StylePIN,
storeId,
storeName,
KeyStoreInfo (KeyStore::SmartCard, storeId, storeName),
entry,
context
);

@ -1339,7 +1339,7 @@ public:
Type type;
Source source;
PasswordStyle style;
QString ks, ksName;
KeyStoreInfo ksi;
KeyStoreEntry kse;
QString fname;
void *ptr;
@ -1384,14 +1384,9 @@ Event::PasswordStyle Event::passwordStyle() const
return d->style;
}
QString Event::keyStoreId() const
KeyStoreInfo Event::keyStoreInfo() const
{
return d->ks;
}
QString Event::keyStoreName() const
{
return d->ksName;
return d->ksi;
}
KeyStoreEntry Event::keyStoreEntry() const
@ -1409,15 +1404,14 @@ void *Event::ptr() const
return d->ptr;
}
void Event::setPasswordKeyStore(PasswordStyle pstyle, const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr)
void Event::setPasswordKeyStore(PasswordStyle pstyle, const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr)
{
if(!d)
d = new Private;
d->type = Password;
d->source = KeyStore;
d->style = pstyle;
d->ks = keyStoreId;
d->ksName = keyStoreName;
d->ksi = keyStoreInfo;
d->kse = keyStoreEntry;
d->fname = QString();
d->ptr = ptr;
@ -1430,21 +1424,20 @@ void Event::setPasswordData(PasswordStyle pstyle, const QString &fileName, void
d->type = Password;
d->source = Data;
d->style = pstyle;
d->ks = QString();
d->kse = QString();
d->ksi = KeyStoreInfo();
d->kse = KeyStoreEntry();
d->fname = fileName;
d->ptr = ptr;
}
void Event::setToken(const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr)
void Event::setToken(const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr)
{
if(!d)
d = new Private;
d->type = Token;
d->source = KeyStore;
d->style = StylePassword;
d->ks = keyStoreId;
d->ksName = keyStoreName;
d->ksi = keyStoreInfo;
d->kse = keyStoreEntry;
d->fname = QString();
d->ptr = ptr;
@ -1940,10 +1933,10 @@ PasswordAsker::~PasswordAsker()
delete d;
}
void PasswordAsker::ask(Event::PasswordStyle pstyle, const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr)
void PasswordAsker::ask(Event::PasswordStyle pstyle, const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr)
{
Event e;
e.setPasswordKeyStore(pstyle, keyStoreId, keyStoreName, keyStoreEntry, ptr);
e.setPasswordKeyStore(pstyle, keyStoreInfo, keyStoreEntry, ptr);
d->ask(e);
}
@ -2001,10 +1994,10 @@ TokenAsker::~TokenAsker()
delete d;
}
void TokenAsker::ask(const QString &keyStoreId, const QString &keyStoreName, const KeyStoreEntry &keyStoreEntry, void *ptr)
void TokenAsker::ask(const KeyStoreInfo &keyStoreInfo, const KeyStoreEntry &keyStoreEntry, void *ptr)
{
Event e;
e.setToken(keyStoreId, keyStoreName, keyStoreEntry, ptr);
e.setToken(keyStoreInfo, keyStoreEntry, ptr);
d->ask(e);
}

@ -1224,6 +1224,63 @@ void KeyStoreManager::sync()
d->items = KeyStoreTracker::instance()->getItems();
}
//----------------------------------------------------------------------------
// KeyStoreManager
//----------------------------------------------------------------------------
class KeyStoreInfo::Private : public QSharedData
{
public:
KeyStore::Type type;
QString id, name;
};
KeyStoreInfo::KeyStoreInfo()
{
}
KeyStoreInfo::KeyStoreInfo(KeyStore::Type type, const QString &id, const QString &name)
:d(new Private)
{
d->type = type;
d->id = id;
d->name = name;
}
KeyStoreInfo::KeyStoreInfo(const KeyStoreInfo &from)
:d(from.d)
{
}
KeyStoreInfo::~KeyStoreInfo()
{
}
KeyStoreInfo & KeyStoreInfo::operator=(const KeyStoreInfo &from)
{
d = from.d;
return *this;
}
bool KeyStoreInfo::isNull() const
{
return (d ? false: true);
}
KeyStore::Type KeyStoreInfo::type() const
{
return d->type;
}
QString KeyStoreInfo::id() const
{
return d->id;
}
QString KeyStoreInfo::name() const
{
return d->name;
}
}
#include "qca_keystore.moc"

@ -322,18 +322,10 @@ private slots:
}
else
{
QCA::KeyStoreManager ksm;
QCA::KeyStore store(e.keyStoreId(), &ksm);
if(!store.isValid())
{
fprintf(stderr, "Error: received password request from unknown keystore.\n");
handler.reject(id);
return;
}
if(store.type() == QCA::KeyStore::SmartCard)
name = QString("the '") + store.name() + "' token";
if(e.keyStoreInfo().type() == QCA::KeyStore::SmartCard)
name = QString("the '") + e.keyStoreInfo().name() + "' token";
else
name = store.name();
name = e.keyStoreInfo().name();
}
str = QString("Enter %1 for %2").arg(type).arg(name);
}
@ -369,15 +361,7 @@ private slots:
}
else
{
QCA::KeyStoreManager ksm;
QCA::KeyStore store(e.keyStoreId(), &ksm);
if(!store.isValid())
{
fprintf(stderr, "Error: received token request from unknown keystore.\n");
handler.reject(id);
return;
}
name = QString("the '") + store.name() + "' token";
name = QString("the '") + e.keyStoreInfo().name() + "' token";
}
QString str = QString("Please insert %1 and press Enter ...").arg(name);