Чтобы позволить маленькому приложению C++ обновлять себя в клиентах, соединенных по Интернету, я нуждаюсь в механизме, который проверяет загрузку на основе открытого ключа. Алгоритмы, такие как DSA или RSA, кажется, могут сделать это приятно.
Однако смотря на известные доступные библиотеки для этого (Crypto ++, LibTomCrypt) они все заканчивают тем, что делали мой двоичный файл> 500k больше, в то время как это кажется мне, такая логика может быть реализована в нескольких k. Есть ли какие-либо библиотеки, которые реализуют проверку хеша RSA/DSA в, скажем, <20k место?
Поскольку я не нашел библиотек, которые соответствовали бы моим конкретным потребностям, я создал для этого свою собственную библиотеку: http://github.com/paiq/dsa_verify . Текущая реализация занимает около 50 КБ памяти программ, в основном из-за включенной математической библиотеки bignum, но будущие версии могут быть лишены еще больше.
Вам действительно нужны шифры? Вообще, для проверки загрузки можно использовать хэш-функцию типа MD5 или SHA. Возможно, вы сможете найти небольшую библиотеку, использующую их.
В любом случае, вы можете попробовать библиотеку openssl. Однако .a на моей машине имеет размер около 400K и 250K зачеркнуто.
Если вы используете только windows, вы можете использовать криптографический API для windows, если ваши приложения развернуты на win2k или выше. Статья Windows Crypto MSDN.
EDIT: Другое возможное решение, если вам просто нужно проверить, что загрузка не была повреждена. Немного погуглив, вы найдете исходники этой небольшой реализации MD5.
В http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.143.3049&rep=rep1&type=pdf описана библиотека эллиптических кривых, которая, по мнению авторов, может быть сконфигурирован так, чтобы на микроконтроллере требовалось всего около 7 КБ ПЗУ и менее 200 байт ОЗУ
контрольные суммы могут легко справиться с такими заданиями по проверке.
Я думаю, вы можете найти библиотеку MIRACL, отвечающую вашим потребностям.