Показать/Скрыть содержание

    Потоковая проверка подписи

    Примечание

    Режим потоковой проверки подписи может быть применен только к одиночным запросам на проверку, пакетная проверка подписи НЕ поддерживается. Хэш-значения для файла подписи (SignatureDocumentHash) и для исходного документа (DocumentHash) не могут быть вычислены в потоковом режиме.

    Для обработки документов большого размера требуются значительные ресурсы со стороны сервера, так как весь документ на время проверки хранится в памяти, для обхода этого ограничения следует применять режим потоковой передачи данных.

    В потоковом режиме обработки запроса сервер начинает выполнение операции сразу после получения первых байтов документа, из входного потока данные считываются небольшими блоками, без буферизации всего содержимого в памяти.

    Формат запроса

    Для того чтобы передать запрос на проверку подписи в потоковом режиме, клиентское приложение должно сформировать следующий HTTP запрос.

    POST /vs/api/signatures/ HTTP/1.1
    CPSVS-PARAMS: ewoiQ29udGVudCI6Ik1JSU1pUVlKS29aSWh2...
    Content-Type: application/octet-stream
    Host: example.com
    

    Отличия от обычного режима передачи:

    • Для присоединенной подписи содержимое файла с подписью передается в теле запроса, а параметры проверки - в заголовке CPSVS-PARAMS. Тип содержимого при этом должен быть application/octet-stream.
    • Для отсоединенной подписи содержимое исходного документа передается в теле запроса, а параметры проверки, включающие в себя файл подписи - в заголовке CPSVS-PARAMS. Тип содержимого при этом должен быть application/octet-stream.

    Формирование заголовка CPSVS-PARAMS

    Заголовок CPSVS-PARAMS в качестве значения содержит параметры операции проверки подписи (то есть запрос в обычном режиме). Наличие или отсутствие полей Content и Source зависит от формата проверяемой подписи:

    1. Подпись формата GOST3410:

    * поле `Content` содержит данные подписи, поле `Source` отсутствует, исходный документ передается в теле запроса.
    

    2. Подпись формата CAdES:

    * Для отсоединенных подписей поле `Content` содержит данные подписи, поле `Source` отсутсвует, исходный документ передается в теле запроса. Параметр `IsDetached` обязателен и должен иметь значение `true`.
    * Для присоединенных подписей поля `Content` и `Source` отсутствуют, документ с подписью передается в теле запроса.
    

    3. Подпись формата XMLDSig/XAdES:

    * поля `Content` и `Source` отсутствуют, документ с подписью передается в теле запроса.
    

    4. Подпись формата PDF:

    * поля `Content` и `Source` отсутствуют, документ с подписью передается в теле запроса.
    

    Пример запроса на проверку подписи

    В примере приведен обычный запрос на проверку отсоединенной подписи формата CAdES (данные, закодированные в Base64, сокращены для удобства чтения):

    {
        "Content":"MIIMi...Jhu",
        "Source":"...",
        "SignatureType": 2,
        "VerifyParams": {
            "VerifyAll": "true",
            "IsDetached":"true"
        }
    }
    

    В потоковом режиме в заголовок помещается следующее значение:

    ewoiQ29udGVudCI6Ik1JSU1pUVlKS29aSWh2Y05BUWNDb0lJTWVqQ0NESFlDQVFFeE5EQUtCZ1lxaFFNQ0Fna0ZBREFLQmdncWhRTUhBUUVDQWpBTUJnZ3FoUU1IQVFFQ0FnVUFNQXdHQ0NxRkF3Y0JBUUlEQlFBd0N3WUpLb1pJaHZjTkFRY0JvSUlJSVRDQ0NCMHdnZ2ZLb0FNQ0FRSUNFUWJUVVgwQXVMS0Jna0tOL2t1UExwaDlNQW9HQ0NxRkF3Y0JBUU1DTUlJQlZqRVZNQk1HQlNxRkEyUUVFZ28zTnpFM01UQTNPVGt4TVNBd0hnWUpLb1pJaHZjTkFRa0JGaEZwYm1adlFHTnllWEIwYjNCeWJ5NXlkVEVZTUJZR0JTcUZBMlFCRWcweE1ETTNOekF3TURnMU5EUTBNUXN3Q1FZRFZRUUdFd0pTVlRFWU1CWUdBMVVFQ0F3UE56Y2cwSnpRdnRHQjBMclFzdEN3TVJVd0V3WURWUVFIREF6UW5OQyswWUhRdXRDeTBMQXhMekF0QmdOVkJBa01KdEdEMExzdUlOQ2gwWVBSaWRHUjBMTFJnZEM2MExqUXVTRFFzdEN3MExzZzBMUXVJREU0TVNVd0l3WURWUVFLREJ6UW50Q2UwSjRnSXRDYTBLRFFtTkNmMEtMUW5pM1FuOUNnMEo0aU1Xc3dhUVlEVlFRRERHTFFvdEMxMFlIUmd0QyswTExSaTlDNUlOQy8wTDdRdE5HSDBMalF2ZEMxMEwzUXZkR0wwTGtnMEtQUXBpRFFudENlMEo0Z0l0Q2EwS0RRbU5DZjBLTFFuaTNRbjlDZzBKNGlJTkNUMEo3UW9kQ2lJREl3TVRJZ0tOQ2owS1lnTWk0d0tUQWVGdzB5TlRBME1EY3dOekkyTVRkYUZ3MHlOVEEzTURjd056TTJNVGRhTUJVeEV6QVJCZ05WQkFNTUNtZHlZVzVrWDJOdmNtVXdaakFmQmdncWhRTUhBUUVCQVRBVEJnY3FoUU1DQWlRQUJnZ3FoUU1IQVFFQ0FnTkRBQVJBZ2V3Z1k1REhMUzJWMkJ3MVMvcmVYcmt5KzJWdWlTVGpnb2o3aS8yM3h2WlNRWjJGM1pCNG9TYjhKRUtaUVMyaFRmTTBYU3JUWm9VdS95ZFBIWmtDaXFPQ0Jha3dnZ1dsTUIwR0ExVWREZ1FXQkJRWjArYnR0R0FDNW44VHo4Z3o2anQzcHJ2WDVUQTFCZ2tyQmdFRUFZSTNGUWNFS0RBbUJoNHFoUU1DQWpJQkNZZnc0RTZHN3M4TWhlbVJXNEt2dEZ5QnlsV0NzMFFDQVFFQ0FRQXdDd1lEVlIwUEJBUURBZ1R3TUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNRUJnZ3JCZ0VGQlFjREFqQW5CZ2tyQmdFRUFZSTNGUW9FR2pBWU1Bb0dDQ3NHQVFVRkJ3TUVNQW9HQ0NzR0FRVUZCd01DTUlIZ0JnZ3JCZ0VGQlFjQkFRU0IwekNCMERBNUJnZ3JCZ0VGQlFjd0FZWXRhSFIwY0RvdkwzUmxjM1JqWVRJd01USXVZM0o1Y0hSdmNISnZMbkoxTDI5amMzQXlMMjlqYzNBdWMzSm1NRFlHQ0NzR0FRVUZCekFCaGlwb2RIUndPaTh2ZEdWemRHTmhNakF4TWk1amNubHdkRzl3Y204dWNuVXZiMk56Y0hObGNuWnBZMlV3V3dZSUt3WUJCUVVITUFLR1QyaDBkSEE2THk5MFpYTjBZMkV5TURFeUxtTnllWEIwYjNCeWJ5NXlkUzloYVdFdllXUTVOVEZoWmpnelpUQTJZVGt4WmpNeU9UQTRZelUxTTJZMVlqUTRaVFEyTW1Vd05qWmtZaTVqY25Rd0hRWURWUjBnQkJZd0ZEQUlCZ1lxaFFOa2NRSXdDQVlHS29VRFpIRUJNQ3NHQTFVZEVBUWtNQ0tBRHpJd01qVXdOREEzTURjeU5qRTJXb0VQTWpBeU5UQTNNRGN3TnpJMk1UWmFNSUlCa0FZRktvVURaSEFFZ2dHRk1JSUJnUXhUMEtIUW10Q1gwSmdnSXRDYTBZRFF1TkMvMFlMUXZ0Q2YwWURRdmlCRFUxQWlJTkN5MExYUmdOR0IwTGpSanlBMExqQWdValFnS05DNDBZSFF2OUMrMEx2UXZkQzEwTDNRdU5DMUlESXRRbUZ6WlNrTWdZZlFuOUNRMEpvZ3dxdlFvOUMwMEw3UmdkR0MwTDdRc3RDMTBZRFJqOUdPMFluUXVOQzVJTkdHMExYUXZkR0MwWUFnd3F2UW10R0EwTGpRdjlHQzBMN1FuOUdBMEw0ZzBLUFFwc0s3SU5DeTBMWFJnTkdCMExqUXVDQXlMakRDdXlBbzBMTFFzTkdBMExqUXNOQzkwWUlnMExqUmdkQy8wTDdRdTlDOTBMWFF2ZEM0MFk4Z09Ta01UOUNoMExYUmdOR0MwTGpSaE5DNDBMclFzTkdDSU5HQjBMN1F2dEdDMExMUXRkR0MwWUhSZ3RDeTBMalJqeURpaEpZZzBLSFFwQzh4TWpRdE5EY3hOeURRdnRHQ0lERTFMakF4TGpJd01qUU1UOUNoMExYUmdOR0MwTGpSaE5DNDBMclFzTkdDSU5HQjBMN1F2dEdDMExMUXRkR0MwWUhSZ3RDeTBMalJqeURpaEpZZzBLSFFwQzh4TWpndE5ESTNNaURRdnRHQ0lERXpMakEzTGpJd01qSXdMd1lGS29VRFpHOEVKZ3drMEovUWtOQ2EwSndnMEpyUmdOQzQwTC9SZ3RDKzBKL1JnTkMrSUVoVFRTQXlMakF1TUdBR0ExVWRId1JaTUZjd1ZhQlRvRkdHVDJoMGRIQTZMeTkwWlhOMFkyRXlNREV5TG1OeWVYQjBiM0J5Ynk1eWRTOWpaSEF2WVdRNU5URmhaamd6WlRBMllUa3haak15T1RBNFl6VTFNMlkxWWpRNFpUUTJNbVV3Tmpaa1lpNWpjbXd3REFZRktvVURaSElFQXdJQkFqQ0NBWklHQTFVZEl3U0NBWWt3Z2dHRmdCU3RsUnI0UGdhcEh6S1FqRlUvVzBqa1l1Qm0yNkdDQVZpa2dnRlVNSUlCVURFZ01CNEdDU3FHU0liM0RRRUpBUllSYVc1bWIwQmpjbmx3ZEc5d2NtOHVjblV4Q3pBSkJnTlZCQVlUQWxKVk1SVXdFd1lGS29VRFpBUVNDamMzTVRjeE1EYzVPVEV4R0RBV0JnVXFoUU5rQVJJTk1UQXpOemN3TURBNE5UUTBOREVZTUJZR0ExVUVDQXdQTnpjZzBKelF2dEdCMExyUXN0Q3dNUlV3RXdZRFZRUUhEQXpRbk5DKzBZSFF1dEN5MExBeEx6QXRCZ05WQkFrTUp0R0QwTHN1SU5DaDBZUFJpZEdSMExMUmdkQzYwTGpRdVNEUXN0Q3cwTHNnMExRdUlERTRNU1V3SXdZRFZRUUtEQnpRbnRDZTBKNGdJdENhMEtEUW1OQ2YwS0xRbmkzUW45Q2cwSjRpTVdVd1l3WURWUVFEREZ6UW90QzEwWUhSZ3RDKzBMTFJpOUM1SU5DejBMN1F1OUMrMExMUXZkQyswTGtnMEtQUXBpRFFudENlMEo0Z0l0Q2EwS0RRbU5DZjBLTFFuaTNRbjlDZzBKNGlJTkNUMEo3UW9kQ2lJREl3TVRJZ0tOQ2owS1lnTWk0d0tZSVJCbHMxbkFDc3NyNlhTTEt1STFnMlFsQXdDZ1lJS29VREJ3RUJBd0lEUVFETWZ6N1hNbDdlb3V6Qk56a3hPRHEwS1Jlc1gzbTN1UTNEK2VTNnhvSTNCS1hlQnNSeVllMXZvMjM5eFllWGtVNHUvMlVHQjREbkpUSmFVMzVYQkdUUE1ZSUVCekNDQkFNQ0FRRXdnZ0Z0TUlJQlZqRVZNQk1HQlNxRkEyUUVFZ28zTnpFM01UQTNPVGt4TVNBd0hnWUpLb1pJaHZjTkFRa0JGaEZwYm1adlFHTnllWEIwYjNCeWJ5NXlkVEVZTUJZR0JTcUZBMlFCRWcweE1ETTNOekF3TURnMU5EUTBNUXN3Q1FZRFZRUUdFd0pTVlRFWU1CWUdBMVVFQ0F3UE56Y2cwSnpRdnRHQjBMclFzdEN3TVJVd0V3WURWUVFIREF6UW5OQyswWUhRdXRDeTBMQXhMekF0QmdOVkJBa01KdEdEMExzdUlOQ2gwWVBSaWRHUjBMTFJnZEM2MExqUXVTRFFzdEN3MExzZzBMUXVJREU0TVNVd0l3WURWUVFLREJ6UW50Q2UwSjRnSXRDYTBLRFFtTkNmMEtMUW5pM1FuOUNnMEo0aU1Xc3dhUVlEVlFRRERHTFFvdEMxMFlIUmd0QyswTExSaTlDNUlOQy8wTDdRdE5HSDBMalF2ZEMxMEwzUXZkR0wwTGtnMEtQUXBpRFFudENlMEo0Z0l0Q2EwS0RRbU5DZjBLTFFuaTNRbjlDZzBKNGlJTkNUMEo3UW9kQ2lJREl3TVRJZ0tOQ2owS1lnTWk0d0tRSVJCdE5SZlFDNHNvR0NRbzMrUzQ4dW1IMHdDZ1lJS29VREJ3RUJBZ0tnZ2dJeE1CZ0dDU3FHU0liM0RRRUpBekVMQmdrcWhraUc5dzBCQndFd0hBWUpLb1pJaHZjTkFRa0ZNUThYRFRJMU1EVXlNREE1TVRnME5Gb3dMd1lKS29aSWh2Y05BUWtFTVNJRUlKeGdlcEc2NEdudGJMdTNtb0hoSWFkaCt5TnZFSkNSOWpnZkJCL1NmTWRQTUlJQnhBWUxLb1pJaHZjTkFRa1FBaTh4Z2dHek1JSUJyekNDQWFzd2dnR25NQW9HQ0NxRkF3Y0JBUUlDQkNCNWRtT3R4V3o2c2tyK29GR3B2V21VdUZhYlpMZjJhaC9IR2RvNVZMblBKekNDQVhVd2dnRmVwSUlCV2pDQ0FWWXhGVEFUQmdVcWhRTmtCQklLTnpjeE56RXdOems1TVRFZ01CNEdDU3FHU0liM0RRRUpBUllSYVc1bWIwQmpjbmx3ZEc5d2NtOHVjblV4R0RBV0JnVXFoUU5rQVJJTk1UQXpOemN3TURBNE5UUTBOREVMTUFrR0ExVUVCaE1DVWxVeEdEQVdCZ05WQkFnTUR6YzNJTkNjMEw3UmdkQzYwTExRc0RFVk1CTUdBMVVFQnd3TTBKelF2dEdCMExyUXN0Q3dNUzh3TFFZRFZRUUpEQ2JSZzlDN0xpRFFvZEdEMFluUmtkQ3kwWUhRdXRDNDBMa2cwTExRc05DN0lOQzBMaUF4T0RFbE1DTUdBMVVFQ2d3YzBKN1FudENlSUNMUW10Q2cwSmpRbjlDaTBKNHQwSi9Rb05DZUlqRnJNR2tHQTFVRUF3eGkwS0xRdGRHQjBZTFF2dEN5MFl2UXVTRFF2OUMrMExUUmg5QzQwTDNRdGRDOTBMM1JpOUM1SU5DajBLWWcwSjdRbnRDZUlDTFFtdENnMEpqUW45Q2kwSjR0MEovUW9OQ2VJaURRazlDZTBLSFFvaUF5TURFeUlDalFvOUNtSURJdU1Da0NFUWJUVVgwQXVMS0Jna0tOL2t1UExwaDlNQW9HQ0NxRkF3Y0JBUUVCQkVCQVJYQ1YvQUJxMEd0RSt2SFRnWW9pRGdSMmY0SjNkZ2lvTWQzWjhhQkVFVjRQWUVWeUtqQjNFMGhZbzJMdHdFMkVJTU1CVmFqRlFCR0YxZUxYZUpodSIsCiAgICAiU2lnbmF0dXJlVHlwZSI6IDIsCiAgICAiVmVyaWZ5UGFyYW1zIjogewogICAgICAgICJWZXJpZnlBbGwiOiAidHJ1ZSIsCiAgICAgICAgIklzRGV0YWNoZWQiOiJ0cnVlIgogICAgfQp9
    

    Данное значение представляет собой BASE64URL(UTF8Bytes(M)), где M:

    {"Content":"MIIMi...Jhu","SignatureType":2,"VerifyParams":{"VerifyAll":"true","IsDetached":"true"}}
    
    В начало © ООО "КРИПТО-ПРО", 2000–2025