Транспорт меток времени в нативном Linux ABI
Задания подписания в нативном Linux поддерживают настоящий транспорт меток времени RFC 3161 через расширенную запись операции; исходная версия ABI, префикс операции, экспортируемая функция и обычный размер записи операции остаются неизменными
typedef hpdf_status (HPDF_CDECL *hpdf_timestamp_transport_v1)(
void *user_data, const void *request, size_t request_length,
const hpdf_io_v1 *response_io);
typedef struct hpdf_signing_operation_v1 {
hpdf_operation_v1 operation;
void *timestamp_user_data;
hpdf_timestamp_transport_v1 timestamp_transport;
} hpdf_signing_operation_v1;
Запись и JSON-конфигурация
Инициализируйте исходные поля операции и задайте operation.struct_size равным sizeof(hpdf_signing_operation_v1); передайте &record.operation в hpdf_document_execute_json_v1 с заданием подписания schemaVersion 1 и timestamp: true
Расширение занимает 72 байта на нативном Linux x86-64; исходный hpdf_operation_v1 остаётся 56 байтов, и hpdf_abi_operation_v1_size по-прежнему сообщает исходный размер
timestampTrustedCAFile задаёт доверенные корни TSA; необязательные timestampTrustedCRLFile и requireTimestampRevocation включают явную проверку отзыва
Callback получает настоящий DER-запрос метки времени, включая отпечаток подписи и сгенерированный nonce; возвращайте реальные байты DER-ответа через переданный callback записи и возвращайте статус ABI
Владение и отмена
Транспорт работает синхронно в вызывающем потоке; байты запроса, таблица callback ответа и пользовательские данные ответа заимствуются только до возврата транспорта
Опрашивайте response_io->is_cancelled во время работы транспорта, учитывайте сбои записи ответа и соблюдайте дедлайны сети или дочерних процессов в callback приложения
maxTimestampResponseBytes по умолчанию равен меньшему из 4194304 байтов и одной восьмой рабочего бюджета операции; настроенный лимит должен быть положительным и не может превышать эту долю рабочего бюджета
Библиотека сохраняет сбойную или отменённую запись ответа, даже если callback приложения позже вернёт успех; сбои метки времени сохраняют неподписанный загруженный контекст и не публикуют подписанный вывод
Валидация и результаты
Нативная реализация проверяет статус ответа, отпечаток подписи, nonce, назначение сертификата TSA, цепочку сертификатов и запрошенную политику отзыва, прежде чем добавить атрибут signatureTimeStampToken и опубликовать подпись
Результаты подписания включают timestampCount, timestampValid и timestampTrustEvaluated; signatures.verify принимает requireTimestamp и те же явные опции доверия и отзыва TSA
Приёмка
Оба нативных компилятора Linux проходят 319 настоящих проверок ctypes, 39 реальных проверок C-клиента меток времени, 33 существующие проверки C ABI и 296 независимых проверок вывода
Независимая проверка OpenSSL аутентифицирует подписи CMS и встроенные токены меток времени, отклоняет изменённые отпечатки подписей и отозванные сертификаты TSA и проверяет документы с метками времени — и открытые, и с AES-256 R5/R6
Нативные задания подписания · Нативный C ABI · Транспорт меток времени в Pascal