Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/release/licenses/OpenXmlSdk-MIT.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
DocumentFormat.OpenXml и DocumentFormat.OpenXml.Framework (Open XML SDK) — https://github.com/dotnet/Open-XML-SDK

The MIT License (MIT)

Copyright (c) .NET Foundation and Contributors

All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# История версий SignService

## v1.4.0 — 20.10.2026

- **Штамп в документах Word (.docx, .docm).** С галочкой «Штамп на документ»
документ Word получает ту же плашку, что и PDF: копия «имя (со штампом).docx»
с плашкой на каждого подписанта (сертификат, владелец, срок, МЧД, дата, логотип).
Страниц в файле Word нет, поэтому «последняя» и «указанные» — плашки в конце
текста, «первая» — в нижнем колонтитуле первой страницы (остальные страницы
и разделы не меняются), «все» — в нижних колонтитулах всех страниц.
Работают оба режима: копия без подписи и «подписывать копию со штампом».
Инструмент «Штамп на PDF/Word…» и пункт контекстного меню — тоже для Word.
Для .doc/.rtf и других форматов в логе пишется, почему штампа нет.
- **Плашки — только по настоящим подписям документа.** Плашка «Документ подписан»
ставится лишь по подписи, которая проверяется по этому документу; подпись под
другой версией файла больше не превращается в плашку. Дата на плашке — время
подписания из самой подписи, номер МЧД — только у того, кто подписывал по ней
(раньше всем подписантам ставились текущие дата и МЧД). «Штамп» без подписания
находит подписи документа по содержимому и работает без выбранного сертификата.
- **Подписанная копия со штампом не затирается.** Если у «… (со штампом).pdf»
уже есть своя подпись, программа не пересоздаёт копию и объясняет, как быть.
Сбой создания копии после записи подписи — предупреждение в строке файла,
а не «Ошибка» подписания. PDF-копия пишется атомарно.
- **Пакет подписания «заморожен».** Пока идёт подписание, параметры подписи,
сертификат, МЧД, «Применить ко всем», настройки и состав очереди не меняются —
раньше их можно было переключить после подтверждения рисков. Подписи,
перетащенные во время подписания, не прикладываются молча к уже подписываемым
файлам. Кнопка «Добавить доверенность…» больше не залипает.
- Перетаскивание папки с недоступной подпапкой больше не обрывается ошибкой.
- System.Security.Cryptography.Pkcs 8.0.2 — исправления уязвимостей
GHSA-846f-f764-76mx и GHSA-2fmv-rv2c-59x7.

## v1.3.3 — 12.10.2026

- **Резервная копия .sig.** В «Настройках…» — галочка «Всегда создавать
Expand Down
29 changes: 20 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
исключить нельзя;
- **Собрать контейнер…** — документ упаковывается в прикреплённый `.sig`
вместе с имеющимися подписями (обратная операция к извлечению);
- **Штамп на PDF…** — копия документа с плашкой о подписании без подписи.
- **Штамп на PDF/Word…** — копия документа с плашкой о подписании без подписи.

### Доверенность (МЧД)

Expand All @@ -96,25 +96,34 @@
(или ещё не действовавший) — ошибка;
- при подписании файлы МЧД (XML + .sig) копируются рядом с подписанным
документом (в CMS-подпись МЧД не вкладывается — так же поступает Контур),
а в визуальный штамп на PDF добавляется строка
а в визуальный штамп добавляется строка
«Действует на основании МЧД № …»;
- доверенность запоминается и перепроверяется в фоне при запуске и перед
каждым пакетным подписанием (один раз на пакет).

### Визуальный штамп на PDF
### Визуальный штамп на PDF и Word

- плашка «ДОКУМЕНТ ПОДПИСАН ЭЛЕКТРОННОЙ ПОДПИСЬЮ»: номер сертификата, владелец,
срок действия, по желанию — дата подписания и **логотип организации** (PNG/JPEG);
- параметры выбираются в диалоге перед операцией: страницы (первая, последняя,
все или указанные, например «1,3-5»), дата, логотип; на каждой выбранной
странице — **отдельная плашка на каждого подписанта**;
- по умолчанию подписывается **оригинал**, а копия «имя (со штампом).pdf» —
отдельный файл **без подписи**, который после каждого подписания
пересоздаётся со **всеми подписантами** итоговой подписи (безопасно
при соподписании: штамп не делает подписи недействительными);
- штамп ставится на PDF и документы **Word (.docx, .docm)**; в Word плашки —
таблицы в рамке у правого края. Страниц в файле Word нет (их считает
программа просмотра), поэтому «последняя» и «указанные» — плашки в конце
текста, «первая» — в нижнем колонтитуле первой страницы (остальные страницы
и разделы не меняются), «все» — в нижних колонтитулах всех страниц;
старые форматы .doc/.rtf подписываются без штампа — сохраните их как .docx;
- по умолчанию подписывается **оригинал**, а копия «имя (со штампом).pdf»
(«имя (со штампом).docx») — отдельный файл **без подписи**, который после
каждого подписания пересоздаётся со **всеми подписантами** итоговой подписи
(безопасно при соподписании: штамп не делает подписи недействительными);
- отдельной галочкой доступен режим «подписывать копию со штампом»
(штамп до подписи) — для случаев, когда принимающая сторона требует
подпись именно под штампованным документом.
подпись именно под штампованным документом;
- копия со штампом, у которой уже есть своя подпись («… (со штампом).pdf.sig»),
не перезаписывается: программа откажется и подскажет, что делать
(добавить подпись к самой копии — подписать её без штампа).

### Сертификаты

Expand Down Expand Up @@ -209,7 +218,7 @@ dotnet publish src/SignService -c Release -r win-x64 --self-contained true \
1. Запустите программу — в списке появятся сертификаты с закрытым ключом.
2. Выберите сертификат, режим подписи и «Добавить к существующей подписи» или
«Создать новую»; у каждого файла видно, к какой подписи добавится ваша.
При необходимости включите штамп на PDF (параметры спросит диалог),
При необходимости включите штамп на PDF или Word (параметры спросит диалог),
штамп времени — в «Настройках…».
3. Перетащите файлы в окно (или «Обзор…») и нажмите **«Подписать»** —
рядом с каждым файлом появится `имя.sig`.
Expand Down Expand Up @@ -248,6 +257,8 @@ src/SignService/
│ ├── CertificateVault.cs # сертификат на ПК: PFX и хранилище Windows
│ ├── TimestampClient.cs # штамп времени TSA (RFC 3161) для CAdES-T
│ ├── PdfStamper.cs # визуальный штамп на PDF (страницы, подписанты, лого)
│ ├── WordStamper.cs # тот же штамп в документе Word (.docx, .docm)
│ ├── DocumentStamper.cs # выбор штампа по формату, защита подписанной копии
│ ├── UpdateService.cs # автообновление через GitHub Releases
│ └── AppSettings.cs # настройки (сертификат, режимы, штампы, доверие)
├── ViewModels/ # MVVM: главное окно, файлы, сертификаты
Expand Down
Loading
Loading