No description
Find a file
Eduard Tantsev 920e1c6d39 change readme
2026-04-17 14:40:36 +03:00
.gitignore старт 2026-03-08 10:02:49 +03:00
AGENTS.md change readme 2026-04-17 14:40:36 +03:00
gui.py добавлен гуй 2026-04-17 14:35:17 +03:00
LICENSE Add MIT license and README 2026-03-08 10:07:01 +03:00
main.py Improve signature stamp details 2026-04-17 14:34:35 +03:00
README.md change readme 2026-04-17 14:40:36 +03:00
requirements.txt добавлен гуй 2026-04-17 14:35:17 +03:00

shtamp

Наложение штампов электронной подписи на PDF-документы.

Извлекает данные подписантов из отсоединённой подписи (PKCS#7 DER / CAdES), верифицирует время подписания через КриптоПро CSP и размещает визуальный штамп на каждой странице PDF. При нескольких подписях штампы укладываются стопкой в правом нижнем углу.

Зависимости

Системные

  • КриптоПро CSP — утилита cryptcp по пути /opt/cprocsp/bin/amd64/cryptcp (верификация и извлечение времени подписания)
  • OpenSSL — разбор сертификатов из PKCS#7
  • Шрифты Liberation Sans — /usr/share/fonts/liberation-sans-fonts/LiberationSans-{Regular,Bold}.ttf
  • tkinter — для графического интерфейса

Python

  • Python 3.10+
  • reportlab — отрисовка штампов
  • pypdf — чтение и запись PDF
  • customtkinter — GUI

Установка

python -m venv venv
source venv/bin/activate
pip install reportlab pypdf customtkinter

Использование

CLI:

python main.py <документ.pdf> <подпись.sig> [--output <результат.pdf>]

GUI:

python gui.py

или:

python main.py --gui

Файл подписи — отсоединённая PKCS#7 DER-подпись (расширение .sig или .p7s).

По умолчанию результат сохраняется рядом с исходником как <имя>_stamped.pdf.

Пример:

python main.py contract.pdf contract.pdf.sig
# Результат: contract_stamped.pdf

python main.py contract.pdf contract.pdf.sig --output signed.pdf

Штамп

На каждой странице в правом нижнем углу размещается штамп для каждой подписи:

┌──────────────────────────────────────────────────────────────┐
│       ДОКУМЕНТ ПОДПИСАН ЭЛЕКТРОННОЙ ПОДПИСЬЮ                 │
│ Сертификат:  525A81716AB59F24...1B96FD9E                     │
│ Владелец:    ИВАНОВ ИВАН ИВАНОВИЧ,                           │
│              ГЕНЕРАЛЬНЫЙ ДИРЕКТОР, ООО "..."                 │
│ Действителен: с 21.04.2025 по 21.07.2026                     │
│ Выдан:      Федеральная налоговая служба                     │
│ Подписан:    13.02.2026 09:02:48 UTC                         │
└──────────────────────────────────────────────────────────────┘

Сейчас подписанты определяются по выводу cryptcp verify, а не просто по наличию SNILS/ИНН в сертификате. Это позволяет не включать в штамп вложенные служебные или timestamp-сертификаты.

Лицензия

MIT