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:
parent
95b5a54358
commit
8b7b7295b9
examples/eventhandlerdemo
include/QtCrypto
plugins
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user