Класс KeyStoreEntry
Публичные типы
enum | Type { TypeKeyBundle , TypeCertificate , TypeCRL , TypePGPSecretKey , TypePGPPublicKey , TypeSymmetricKey } |
Публичные функции
Certificate | certificate () const |
CRL | crl () const |
bool | ensureAccess () |
bool | ensureAvailable () |
QString | id () const |
bool | isAccessible () const |
bool | isAvailable () const |
bool | isNull () const |
KeyBundle | keyBundle () const |
KeyStoreEntry () | |
KeyStoreEntry (const KeyStoreEntry &from) | |
KeyStoreEntry (const QString &serialized) | |
QString | name () const |
KeyStoreEntry & | operator= (const KeyStoreEntry &from) |
PGPKey | pgpPublicKey () const |
PGPKey | pgpSecretKey () const |
QString | storeId () const |
QString | storeName () const |
SymmetricKey | symmetricKey () const |
QString | toString () const |
Type | type () const |
Публичные функции, унаследованные от QCA::Algorithm
Algorithm (const Algorithm &from) | |
void | change (const QString &type, const QString &provider) |
void | change (Provider::Context *c) |
Provider::Context * | context () |
const Provider::Context * | context () const |
Algorithm & | operator= (const Algorithm &from) |
Provider * | provider () const |
Provider::Context * | takeContext () |
QString | type () const |
Статические публичные функции
static KeyStoreEntry | fromString (const QString &serialized) |
Дружественные функции и классы
class | KeyStoreTracker |
Дополнительные унаследованные члены
Защищённые функции, унаследованные от QCA::Algorithm
Algorithm () |
Algorithm (const QString &type, const QString &provider) |
Подробное описание
Одна запись в KeyStore.
Это контейнер для объекта любого типа в KeyStore (например, ключей PGP или сертификатов / закрытых ключей X.509).
Объекты KeyStoreEntry
получаются через
KeyStore или загружаются из
сериализованного строкового формата. Последний метод требует, чтобы
KeyStoreEntry
, полученный через
KeyStore, был сериализован для будущей
загрузки. Например:
QString str = someKeyStoreEntry.toString();
[ app saves str to disk ]
[ app quits ]
…
[ app launches ]
[ app reads str from disk ]
KeyStoreEntry entry(str);
printf("Имя записи: [%s]\n", qPrintable(entry.name()));
Объекты KeyStoreEntry
могут быть доступны или
недоступны. Запись недоступна, если у неё нет частного содержимого. Частное содержимое может
существовать на внешнем оборудовании. Чтобы определить, доступна ли запись, следует вызвать
isAvailable().
Чтобы убедиться, что запись доступна перед выполнением операции с закрытым ключом, следует вызвать
ensureAvailable
. Например:
if(entry.ensureAvailable())
{
entry.keyBundle().privateKey().signMessage(…);
…
}
ensureAvailable() блокирует и/или организовывает доступ к физическому оборудованию, но если он завершится успешно, можно будет использовать частное содержимое записи. В случае токена смарт-карты это также означает, что она, вероятно, вставлена.
Чтобы просмотреть запись асинхронно, нужно сделать следующее:
KeyStoreEntryWatcher *watcher = new KeyStoreEntryWatcher(entry);
connect(watcher, &KeyStoreEntryWatcher::available, this, &YourClass::entry_available);
…
void entry_available()
{
// запись сейчас доступна
watcher->entry().keyBundle().privateKey().signMessage(…);
}
Общедоступное содержимое всегда можно использовать, даже если запись недоступна. Сериализованные данные записи содержат все метаданные, необходимые для восстановления общедоступного контента.
Теперь, даже если запись может быть доступна, это не означает, что имеется доступ к её использованию для операций. Например, даже если запись KeyBundle, предлагаемая смарт-картой, может быть доступна, как только приложение попытается использовать объект PrivateKey для операции подписи, может потребоваться PIN-код. Можно вызвать функцию ensureAccess(), если нужно синхронно предоставить PIN-код на ранней стадии:
if(entry.ensureAccess())
{
// работа с закрытым ключом
…
}
Следует обратить внимание, что не нужно вызывать ensureAvailable() перед ensureAccess(). Вызвать последнее достаточно, чтобы подразумевать и то, и другое.
После того, как приложение настроено на использование определённого ключа, ожидается, что его обычная процедура выполнения будет следующей:
1) Создать KeyStoreEntry
из сериализованных
данных. 2) Если объект содержимого недоступен, дождаться его (с помощью
ensureAvailable()
или
KeyStoreEntryWatcher).
3) Передать объект(ы) содержимого операции высокого уровня, такой как
TLS.
В этом случае любой запрос PIN-кода и операции с закрытым ключом будут вызываться/обрабатываться из объекта TLS. Если пропустить шаг 2, то операции с закрытым ключом могут вызвать запрос токена.
Примеры
Описание перечислений
Type
enum QCA::KeyStoreEntry::Type |
Тип записи в KeyStore.
Описание конструкторов и деструктора
KeyStoreEntry() [1/3]
QCA::KeyStoreEntry::KeyStoreEntry () |
Создаёт пустой KeyStoreEntry
.
KeyStoreEntry() [2/3]
QCA::KeyStoreEntry::KeyStoreEntry (const QString & serialized) |
Создаёт пассивный KeyStoreEntry
на основе
сериализованной строки.
Параметры
serialized | Строка, содержащая информацию о записи в хранилище ключей |
См. также fromString
KeyStoreEntry() [3/3]
QCA::KeyStoreEntry::KeyStoreEntry (const KeyStoreEntry & from) |
Стандартный конструктор копирования.
Параметры
from | Исходная запись |
Описание методов
operator=()
KeyStoreEntry& QCA::KeyStoreEntry::operator= (const KeyStoreEntry & from) |
Стандартный оператор присваивания.
Параметры
from | Исходная запись |
isNull()
bool QCA::KeyStoreEntry::isNull () const |
Проверяет, является ли ключ пустым (null
).
isAvailable()
bool QCA::KeyStoreEntry::isAvailable () const |
Проверяет, можно ли использовать этот ключ.
Ключ считается доступным, если присутствует закрытое содержимое ключа.
См. также ensureAvailable
isAccessible()
bool QCA::KeyStoreEntry::isAccessible () const |
Проверяет, доступен ли ключ в данный момент.
Результат означает, что в это время можно использовать часть закрытого ключа. Для смарт-карты это означает, что все необходимые операции (например, вход в систему / ввод PIN-кода) выполнены.
Если
isAccessible()
равно true
, то ключ обязательно доступен (т.е.
isAvailable()
также true
).
См. также ensureAccessible
,
type()
Type QCA::KeyStoreEntry::type () const |
Определяет тип ключа, хранящегося в этом объекте.
name()
QString QCA::KeyStoreEntry::name () const |
Имя, связанное с ключом, хранящимся в этом объекте.
id()
QString QCA::KeyStoreEntry::id () const |
ID, связанное с ключом, хранящимся в этом объекте.
storeName()
QString QCA::KeyStoreEntry::storeName () const |
Имя KeyStore для этого ключа.
storeId()
QString QCA::KeyStoreEntry::storeId () const |
Идентификатор KeyStore для этого ключа.
См. также KeyStore::id()
toString()
QString QCA::KeyStoreEntry::toString () const |
Сериализует объект в строку для использования в качестве пассивной записи.
fromString()
static KeyStoreEntry QCA::KeyStoreEntry::fromString (const QString & serialized) | static |
Загружает пассивную запись, используя в качестве исходных данных сериализованную строку.
Параметры
serialized | Строка, содержащая информацию о записи в хранилище ключей |
Возвращает заново созданный KeyStoreEntry
.
keyBundle()
KeyBundle QCA::KeyStoreEntry::keyBundle () const |
Если KeyBundle хранится в этом объекте, возвращает данную связку.
certificate()
Certificate QCA::KeyStoreEntry::certificate () const |
Если Certificate хранится в этом объекте, возвращает данный сертификат.
crl()
CRL QCA::KeyStoreEntry::crl () const |
Если CRL хранится в этом объекте, возвращает данный CRL.
pgpSecretKey()
PGPKey QCA::KeyStoreEntry::pgpSecretKey () const |
Если ключ, хранящийся в этом объекте, является закрытым ключом PGP
, возвращает содержимое этого
ключа.
pgpPublicKey()
PGPKey QCA::KeyStoreEntry::pgpPublicKey () const |
Если ключ, хранящийся в этом объекте, является открытым или закрытым ключом PGP
, извлекает часть
открытого ключа из данного ключа PGP
.
symmetricKey()
SymmetricKey QCA::KeyStoreEntry::symmetricKey () const |
Если ключ, хранящийся в этом объекте, является секретным ключом, возвращает содержимое этого ключа.
ensureAvailable()
bool QCA::KeyStoreEntry::ensureAvailable () |
Возвращает true
, если запись доступна, иначе false
.
Доступность означает, что любое частное содержимое для этой записи присутствует и готово к использованию. В случае смарт-карты это гарантирует, что карта вставлена, и можно вызвать запрос токена.
Вызов этой функции для уже доступной записи может вызвать обновление записи.
См. также isAvailable
Примечание.
Эта функция блокирующая.
Эта синхронная операция может потребовать обработки событий, поэтому её нельзя вызывать из того же потока, что и EventHandler.
ensureAccess()
bool QCA::KeyStoreEntry::ensureAccess () |
То же, что и ensureAvailable
, но при необходимости обеспечит предоставление PIN-кода.
См. также isAccessible
Примечание.
Эта синхронная операция может потребовать обработки событий, поэтому её нельзя вызывать из того же потока, что и EventHandler.