LINUX.ORG.RU

проще посмотреть исходники ssh-keygen. Вряд ли там будет что-то мудрёное.

А что ты хочешь сделать с fingerprint? Может, тебе просто подойдёт считать md5-сумму или ещё чего у ключа.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

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

quest ★★★★
() автор топика
Ответ на: комментарий от quest

хочется взять какую то функцию которая будет и дальше работать с другими ключами в будущем.

возьми целиком key.c, сделай из неё либу (думаю, за час вопрос решается) и используй. Как видно из сырцов, парой вызовов из openssl ну никак не обойтись если хочешь считать fingerprint так же как в openssh.

true_admin ★★★★★
()

Fingerprint ключа/сертификата считается как md5/sha1 сумма от ключа/сертификата в кодировке BASE64 без тегов ----BEGIN CERTIFICATE----- и -----END CERTIFICATE----- и без символов разрыва строки. Пруфы тебе предоставит вывод openssl x509 -in <cert> -fingerprint sha1/md5

anonymous
()
Ответ на: комментарий от true_admin

возьми целиком key.c, сделай из неё либу (думаю, за час вопрос решается) и используй.

это понятно, но это будет велосипед. введут потом какой нибудь rsa2 и привет, я был уверен что в openssl это встроено

quest ★★★★
() автор топика
Последнее исправление: quest (всего исправлений: 1)
Ответ на: комментарий от anonymous

md5/sha1 сумма от ключа/сертификата в кодировке BASE64 без тегов

как минимум для RSA это подругому, а для DSA еще более подругому

quest ★★★★
() автор топика
Ответ на: комментарий от quest

введут потом какой нибудь rsa2 и привет

Обновишь key.c и всё будет пучком.

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

Я бы вообще сделал через ssh-keygen и не парился пока бы не убедился что затык именно в этом. Ты уверен что тебе нужно будет десятки ключей в секунду проверять? А иначе это не имеет практического смысла (ну кроме как удовлетворить тягу к перфекционизму). Зато если введут новый вид ключей то обновишь ssh и проблема решиться.

Если бы можно было использовать бинари как библиотеки я бы предложил делать dlopen(«ssh-keygen») :)

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

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

quest ★★★★
() автор топика
Последнее исправление: quest (всего исправлений: 1)
Ответ на: комментарий от quest

но не красиво это вызывать тулзу

ну почему же, unix-way :). Вообще, я бы остановился на внешней тулзе потому что это

1) минимум кода, причём write once, use forever

2) простота отладки

3) готовое и проверенное решение

4) поддержка новых форматов ключей на плечах других

Я вообще сейчас перешёл на принцип «меньше кода - лучше» :)

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

есть еще один путь - продвижение нужно функционала в существующие библиотеки. посмотрел я libssh и libssh2 все нет там простого пути скормить им кусок памяти сказав что это публичный ключ и посчитать по нему fingerprint.

В libssh это должен быть файл, в libssh2 нужно открывать соединение.

quest ★★★★
() автор топика
Последнее исправление: quest (всего исправлений: 1)
Ответ на: комментарий от quest

в существующие библиотеки

как-то эти библиотеки не вызвали у меня доверия. Да и это будет раздувать зависимости твоего приложения, а openssh есть везде.

Кстати, я тут недавно для себя открыл философию unix, может тебе это понравится:

Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.

Rule of Composition: Design programs to be connected to other programs.

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

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.