Detached signature данных из stdin и опция --set-filename – [решено]


Коллеги,

Имеется скрипт, генерирующий detached-подпись данных, которые идут из стандартного ввода: gpg -abu keyID. (Сами эти данные позднее сохраняются в файл, но на этапе генерации подписи файл ещё не существует, и лучше бы так оно и оставалось.) Проблема в том, что при сверке такой подписи gpg предлагает ввести имя файла, который был подписан, или, опять же, ввести исходный файл через stdin. Этот запрос имени файла всё портит.

Было бы крайне желательно задать имя файл наперёд ещё на этапе генерации подписи. В мане нашлась похожая опция --set-filename, но она, похоже, не действует для подписанных данных, только для зашифрованных.

Есть идеи, как это можно обойти? Подписывать файл, а не stdin — тривиальное решение, но в данном случае оно не слишком подходит, заранее убедительно прошу его не предлагать.

P.S. GnuPG 2.0.11, если это имеет значение. Проверьте, может set-filename у вас ведёт себя иначе?

Комментарии
— sentaus (22/08/2010 19:14, исправлен 22/08/2010 19:14)   

Да, в контейнере, содержащем только подпись, имя файла не сохраняется.
Сохраняется, только если в контейнер сохранять и подписываемые данные, пусть и незашифрованные.

— SATtva (22/08/2010 19:20, исправлен 22/08/2010 19:20)   

Это ещё более худшее решение, чем раскидывать временные файлы по диску. :) Видимо, придётся отказаться от stdin.

— sentaus (22/08/2010 19:32, исправлен 22/08/2010 19:36)   

Кстати, я что-то не понимаю, как это поможет.


echo Test | gpg -abu keyID > Test1.asc


gpg -abu keyID Test


В файле Test содержится просто строка Test.


После выполнения этих двух команд файлы-результаты Test1.asc и Test.asc идентичны, и исходного имени там всё равно нет. Или имя исходного файла будет "храниться" в имени файла-подписи?

— SATtva (22/08/2010 19:50)   
Да, в файле подписи. В этом случае при сверке подписи gpg автоматически пытается найти файл с данным именем в текущем каталоге и только если не обнаруживает его, то просит пользователя ввести имя вручную.
— sentaus (22/08/2010 20:02, исправлен 22/08/2010 20:04)   

Стоп. А если вы заранее знаете, какое имя файла будет использоваться при сохранении потока с данными (которое в --set-filename планировали указать), то что мешает просто сохранять подпись в файл с таким же именем + ".asc"? Нужно собственно вывод gpg перенаправить в файл. Или я чего-то не понял?

— SATtva (22/08/2010 20:34)   
О, оно самое! Я был в полной уверенности, что имеет значение только "вшитое" имя, а не такая эвристика. Спасибо.