Следующий: , Вверх: Протокол агента   [Содержание][Указатель]


2.6.1 Расшифровать сеансовый ключ

Программа-клиент запрашивает у сервера расшифровку сеансового ключа. Зашифрованный сеансовый ключ должен содержать все сведения, необходимые для выбора подходящего секретного ключа или перенаправления на электронную карту.

  SETKEY <код_ключа>

Указать серверу ключ, который должен применяться для расшифровки. Если команда не подана, gpg-agent может попытаться выявить ключ, пытаясь расшифровать сообщение всеми доступными ключами.

  PKDECRYPT

Агент проверяет, разрешена ли эта команда, а затем производит запрос, чтобы получить зашифрованный текст; затем программа-клиент должна послать зашифрованный текст.

    S: INQUIRE CIPHERTEXT
    C: D (xxxxxx
    C: D xxxx)
    C: END

Обратите внимание, что сервер при чтении строк данных из программы-клиента может высылать строки состояния. Высылаются SPKI-подобные S-выражения следующей структуры:

     (enc-val
       (<алгоритм>
         (<имя_параметра_1> <длинное_число>)
 	   ...
         (<имя_параметра_n> <длинное_число>)))

Где алгоритм представлен строкой с названием алгоритма; допустимый список алгоритмов см. в документации Libgcrypt. Имена и количество параметров зависят от алгоритма. Ошибка программой-агентом в случае несоответствия выдается.

Если расшифровка прошла успешно, расшифрованные данные выдаются в виде строк на «D».

Вот пример сеанса:

   C: PKDECRYPT
   S: INQUIRE CIPHERTEXT
   C: D (enc-val elg (a 349324324)
   C: D    (b 3F444677CA)))
   C: END
   S: # следует сеансовый ключ
   S: S PADDING 0
   S: D (значение 1234567890ABCDEF0)
   S: OK decryption successful

Строка состояния «PADDING» высылается, только если gpg-agent знает, какого рода заполнение используется. На сегодня применяется только значение 0, чтобы указать, что заполнение удалено.