[О блоге] [наверх] [пред] [2023-01-21 21:57:29+03:00] [cd7828b1e25e657ea5a853a1bebbca7453a76b1b]
Темы: [crypto]

Парсинг 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 не рекомендуется. А я все свои
  проекты всё равно с ним собираю. Лишь считанное количество
  игнорирований есть в коде
* Нет рекурсиям

    [оставить комментарий]
    комментарий 0:
    From: kmeaw
    Date: 2023-01-22 00:36:22Z
    
    > Strict compilation options
    > clang -Weverything -Werror
    
    Стоит очень аккуратно использовать опции типа -Weverything вместе с
    -Werror. Я старась делать так, чтобы такие опции включались при
    разработке, но не попадали в релизные тарболлы.
    
    В противном случае это может стать источником проблем для мейнтейнера
    пакета, ведь новая версия компилятора может содержать новые
    предупреждения, которых на более старой версии, используемой
    разработчиком, ещё не было.
    
    комментарий 1:
    From: Sergey Matveev
    Date: 2023-01-22 10:22:55Z
    
    *** kmeaw [2023-01-22 00:34]:
    >Стоит очень аккуратно использовать опции типа -Weverything вместе с
    >-Werror. Я старась делать так, чтобы такие опции включались при
    >разработке, но не попадали в релизные тарболлы.
    
    Полностью согласен! Релиз и разработка это вещи раздельные. И,
    действительно, сам напарывался на то, что при обновлении компилятора у
    меня новые ошибки появлялись.