Віджет verify виконує повну валідацію підпису: криптографія, ланцюжок
сертифікатів, OCSP/CRL-статуси, мітки часу. Ключ і пароль не потрібні — це
безсекретний віджет (у ньому фізично немає коду роботи з ключами).
Мінімальний приклад
import { embed } from 'https://dstucrypt.io/embed/dstucrypt-embed.mjs';
const verifier = await embed('verify', {
mount: '#verify-box', // зручно вбудувати панеллю, не модалкою
});
const report = await verifier.verify(p7sFile);
if (report.valid) console.log('Підпис дійсний', report.signers);
API
const report = await verifier.verify(signature, data?);
signature— файл/байти підпису (.p7s,.pdf,.xml,.asics,.asice). Формат визначається автоматично — CMS, PDF, XML чи ASiC.data— оригінальні дані; потрібні лише для відокремленого (detached) підпису.
Результат
{
valid: true, // сумарний вердикт
signers: [{ // по одному на кожного підписанта
status: 'TOTAL-VALID', // TOTAL-VALID | TOTAL-FAILED | INDETERMINATE
valid: true,
statusSignature: 'VALID', // криптографічна перевірка підпису
statusMessageDigest: 'VALID', // цілісність даних
accredited: true, // true — від акредитованого АЦСК (це КЕП); false — ні; null — не перевірено
format: 'CAdES-T',
signingTime: '2026-07-30 12:00:00',
timestampTime: '2026-07-30 12:00:02', // мітка часу, якщо є
ocspStatus: 'GOOD', // статус сертифіката за OCSP (якщо перевірявся)
crlStatus: undefined, // або за CRL
signerCertId: '…',
signerName: 'Іваненко Іван Іванович', // ПІБ/назва з сертифіката (CN)
signerOrg: 'ТОВ «Приклад»', // організація (O), якщо відрізняється
signerCode: '1234567890', // РНОКПП/ЄДРПОУ (serialNumber)
}],
content: Bytes | null, // вкладені дані (для attached-підпису)
}
content — обгортка Bytes (.bytes, .text(),
.download()); дозволяє одразу показати чи зберегти документ, вкладений у підпис.
accredited показує, чи це КЕП: сертифікат підписанта простежено до
офіційного кореня ЦЗО (акредитований АЦСК). false — підпис дійсний, але без
статусу КЕП; null — акредитацію не перевіряли.
Рекомендація для критичних рішень
Віджет чесно перевіряє підпис у браузері — цього достатньо для UX (показати користувачу вердикт). Але якщо на підставі перевірки ви приймаєте рішення на бекенді (зарахувати платіж, прийняти документ) — не довіряйте вердикту, що прийшов із браузера клієнта: браузер контролює користувач. Передайте сам підпис на свій бекенд і перевірте його там — для цього ми даємо готовий серверний API (нижче). Для входу за КЕП є окремий готовий потік — див. Вхід за КЕП.
Серверна перевірка (для бекенда)
Авторитетна перевірка на нашому сервері нативним криптоядром: криптографія + ланцюжок до акредитованого АЦСК + OCSP/CRL + мітка часу. Використовуйте для критичних рішень (зарахувати платіж, прийняти документ) — на відміну від браузерної перевірки, тут результат не контролює клієнт.
curl -X POST https://dstucrypt.com.ua/api/verify \
-H "Content-Type: application/json" \
-d '{ "signature": "<base64 .p7s/.pdf/.xml/.asice>" }'
{ "signature": "<base64>" }— підпис (формат визначається автоматично);{ "signature": "<base64>", "content": "<base64>" }— для detached-підпису (окремі оригінальні дані);{ "cert": "<base64>" }— перевірити один сертифікат (акредитація + OCSP).
Відповідь:
{
"ok": true, // усі підписи криптографічно дійсні
"signers": [{
"status": "TOTAL-VALID",
"signatureValid": true, // криптографія підпису
"digestValid": true, // цілісність даних
"accredited": true, // сертифікат від акредитованого АЦСК
"qualified": true, // це КЕП (accredited + дійсний)
"revocation": "GOOD", // OCSP/CRL: GOOD | REVOKED | UNKNOWN
"signatureFormat": "CAdES-T",
"signingTime": "2026-07-30 12:00:00",
"timestampTime": "2026-07-30 12:00:02",
"subject": {
"fullName": "Іваненко Іван Іванович",
"taxId": "1234567890", // РНОКПП
"orgCode": "12345678", // ЄДРПОУ
"issuer": "АЦСК …",
"certSerial": "…", "validFrom": "…", "validTo": "…"
}
}],
"content": "<base64 вкладеного вмісту, якщо attached>"
}
Для режиму { "cert": … } відповідь: { ok, accredited, qualified, revocation, subject }.