]> Sergey Matveev's repositories - stargrave-blog.git/commit
Парсинг X.509 сертификатов в Си
authorSergey Matveev <stargrave@stargrave.org>
Sat, 21 Jan 2023 18:57:29 +0000 (21:57 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 21 Jan 2023 18:57:29 +0000 (21:57 +0300)
commitcd7828b1e25e657ea5a853a1bebbca7453a76b1b
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent46c2e8f77a825113ad19800d97a38fe2a39dc3f0
Парсинг X.509 сертификатов в Си

https://www.sstic.org/media/SSTIC2019/SSTIC-actes/journey-to-a-rte-free-x509-parser/SSTIC2019-Article-journey-to-a-rte-free-x509-parser-ebalard_mouy_benadjila_3cUxSCv.pdf
Статья рассматривает проблемы парсинга сертификатов на Си. Это, само
собой, жопа, из-за сложности как структур, так и самого ASN.1.

Понравился раздел про developer constraints, которые они хотят
использовать.

* C99, без VLA -- вот и я тоже пишу на C99, но чтобы никаких эти VLA,
  ибо это открывает врата в ад. Полностью отказываться от C99 из-за
  этого VLA я не хочу
* Отсутствие динамического выделения памяти. В моих программах malloc
  вообще редко когда встречается. Чаще всего я просто выделяю буферы
  достаточного размера (речь про работу с данными по сети). Пускай часть
  памяти и не будет использована полностью, но зато куда более простой
  код, наверняка и эффективный, плюс меньше возможных ошибок связанных с
  памятью кучи
* Ограниченное использование указателей на функции
* Отсутствие внешних зависимостей
* Использование const и static квалификаторов. Про static компилятор
  подсказывает всегда, как и про const, но про него и так не забываю
* Использование беззнаковых целых чисел ограниченной длины (uint*_t).
  Тоже предпочитаю их, когда явно есть возможность использования
* Строгие опции компиляции. Тут они используют -Weverything, который
  даже в самой документации к Clang не рекомендуется. А я все свои
  проекты всё равно с ним собираю. Лишь считанное количество
  игнорирований есть в коде
* Нет рекурсиям