Шифрование зарплатной ведомости

Сертификаты шифрования

Для шифрования зарплатной ведомости необходимо установить Банковский сертификат шифрования

Сертификат действителен до 18.04.2024
Новый сертификат будет опубликован за 30 дней до окончания срока действия текущего. Новый сертификат будет действителен на следующий день от даты окончания текущего.

Пошаговый алгоритм шифрования и расшифрования описаны для VPNKeyTLS, Рутокен.

Формирование JOSE

Для того, чтобы отправить и получить зарплатную ведомость в зашифрованном виде необходимо в POST-запрос (/v1/payrolls) передать http-заголовок Content-Type со значением application/jose и Accept со значением application/jose , тогда запрос будет обрабатываться в формате в JOSE в представлении JWE Compact Serialization и сформированный не ошибочный ответ (код ответа 201) будет представлен в JOSE в представлении JWE Compact Serialization.

При этом в ответе также будет содержаться http-заголовок Content-Type со значением application/jose.

Логика формирования JOSE

1. Преобразование JSON в формат JWS

JWS Compact Serialization имеет следующий вид:

BASE64URL(Header) || '.' || BASE64URL(Payload) || '.' || BASE64URL(Signature)

Подписание запроса транспортной подписью

Content-Type может содержать одно из двух значений:

  • application/json – запрос без подписи
  • application/jose – запрос, подписанный транспортной подписью

Если Content-Type имеет значение application/jose, то запрос должен содержать данные (реквизитный состав платежного документа) в виде компактной сериализации RFC 7515: JSON Web Signature (JWS).

JWS состоит из:

1. Заголовка (Header)
2. JSON-документа с реквизитным составом платежного поручения (Payload)
3. Подписи запроса (Signature)

Формирование компактной сериализации JWS

JWS формируется из трех составляющих:

Base64Url(Header) || ’.’ ||  Base64Url(Payload) || ’.’ || Base64Url(Signature)

Signature - это подпись данных приватной частью ключевой пары клиента (используется приватный ключ парный сертификату клиента с UUID, указанному в Заголовке (Header) в параметре kid).
Подпись вычисляется по алгоритму указанному в Заголовке (Header) в параметре alg, в данном случае gost34.10-2012, и вычисляется от исходных данных:

Base64Url(Header) || ‘.’ || Base64Url(Payload).

Формирование исходных данных для вычисления подписи описано в спецификации RFC 7515: JSON Web Signature (JWS).

Следует отметить, что при кодировании JWS используется преобразование Base64Url, отличающееся от Base64 преобразования.
Условно это преобразование можно представить следующим образом:

Base64Url(x) := Base64(x).Split(‘=’)[0].Replace(‘+’, ’-’).Replace(‘/’, ’_’)

здесь функция Split(x), разбивает строку на части ([i] означает взятие i–ой части), используя символ разделитель x, функция Replace(x,y) заменяет все вхождения символа x на символ y.

Преобразование BASE64URL, отличается от BASE64 преобразования:

BASE64URL BASE64
- (minus) +
_ (underline) /
  • В BASE64URL не используется (опускается) padding, т.е. не добавляются знаки ‘=’ на конце закодированного содержимого Padding of Encoded Data.

2. Формирование JWE Compact Serialization

JWE Compact Serialization состоит из 5 частей, разделитель между частями - символ «.»

Для запроса в SberBusinessAPI структура JWE Compact Serialization будет иметь следующий вид:
BASE64URL(UTF8(JWE Protected Header)) || '.' '.' '.' || BASE64URL(JWE Ciphertext) || '.'

Правило формирования Protected Header

В запросе защищенный заголовок (Protected Header) будет иметь следующий вид:

{

"typ": "JOSE",

"enc": "Алгоритм, по которому был зашифрован запрос gost28147-89",

"alg": "dir"

} 

Правило формирование Ciphertext

В качестве шифруемого текста (Ciphertext) используем запрос в формате JWS Compact Serialization (см. п1)

3. Выполнение шифрования Protected Header и Ciphertext

Алгоритм шифрования

Логика шифрования с помощью токена (Рутокен, Инфокрипт) описана в разделе 19 документации VPNKEY

Для шифрования с помощью токена (VPNKeyTLS, Рутокен) необходимо выполнить следующие действия:

  • Проинициализировать устройство (INIT_ENCIPHER_ID).
  • Внести данные сторонних cертификатов (ADD_RECIPIENT_Y_ID – 1 или более вызовов).
  • Внести данные для шифрования (ENCIPHER_ID – 1 или более вызовов).
  • Получить данные начала и окончания CMS (GET_ENCIPHER_CMS_ID).
  • Cформировать CMS с использованием зашифрованных данных в соответствии со схемой Шифрованные_данные_в_формате_CMS = base64( head +[Recipient_info] + suffix + зашифрованные данные)

Запросы необходимо отправлять на http://localhost:28016/vpnkeylocal//, где SID2-идентификатор сессии, получаемый после перехода в бизнес-систему.

Инициализация шифрования

Параметры запроса

Параметры запроса (Тип) Ограничение Назначение
id (ID_FORMAT) INIT_ENCIPHER_ID id функции
datasize (NUMBER) 2^32 - 1 размер данных для шифрования
mode (ENUM) 1, 2 Стандарт криптооперации: КС1 - токен только генерирует ключевую пару, данные шифруются "стартом.ехе" / КС2 - токен генерирует ключевюу пару и шифрует данные.
С версии 500; опционально

Пример запроса

POST http://localhost:28016/vpnkeylocal/6LbqY8D4zqDqTMIzeqoBTSto5rS6Ehq3ay/ HTTP/1.1\r\n

Content-Length: 16\r\n\r\n

id=INIT_ENCIPHER_ID&datasize=11425&mode=1

Параметры Ответа

Параметры запроса (Тип) Ограничение Назначение
id (ID_FORMAT) INIT_ENCIPHER_ID id функции
datasize (NUMBER) 2^32 - 1 размер данных для шифрования
mode (ENUM) 1, 2 Стандарт криптооперации: КС1 - токен только генерирует ключевую пару, данные шифруются "стартом.ехе" / КС2 - токен генерирует ключевюу пару и шифрует данные.
С версии 500; опционально

Пример ответа

HTTP/1.0 200 OK\r\n

Content-Length: 12\r\n

Content-type: text/html\r\n\r\n

ctx_handle="xXrKOSKc"&retcode="1"

Добавление стороннего сертификата

Параметры запроса

Параметры запроса (Тип) Ограничение Назначение
id (ID_FORMAT) ADD_RECIPIENT_Y_ID id функции
data (BASE64) Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+: 15360 байтов бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
данные стороннего сертификата в base64
ctx_handle (HANDLE) 8 байт хендл контекста операции

Пример запроса

POST http://localhost:28016/vpnkeylocal/6LbqY8D4zqDqTMIzeqoBTSto5rS6Ehq3ay/ HTTP/1.1\r\n

Content-Length: xxx\r\n\r\n

id=ADD_RECIPIENT_Y_ID&data=

MIIGFTCCBcKgAwIBAgIKeJsrF2cm48r4SDAKBggqhQMHAQEDAjCCAWsxGzAZBgNVBAgMEjc3INCzLtCc0L7RgdC60LLQsDEYMBYGA1UEBwwP0LMu0JzQvtGB0LrQstCwMRowGAYIKoUDA4EDAQESDDAwNzcwNzA4Mzg5MzEmMCQGA1UECQwd0YPQuy4g0JLQsNCy0LjQu9C%2B0LLQsCwg0LQuMTkxGDAWBgUqhQNkARINMTAyNzcwMDEzMjE5NTELMAkGA1UEBhMCUlUxKzApBgNVBAoMItCf0JDQniDQodCx0LXRgNCx0LDQvdC6ICjQotCV0KHQoikxQzBBBgNVBAsMOtCU0LXQv9Cw0YDRgtCw0LzQtdC90YIg0LHQtdC30L7Qv9Cw0YHQvdC%2B0YHRgtC4ICjQotCV0KHQoikxMjAwBgNVBAMMKdCf0JDQniDQodCx0LXRgNCx0LDQvdC6INCj0KYgKNCi0JXQodCiIFEpMSEwHwYJKoZIhvcNAQkBFhJjYXNicmZAc2JlcmJhbmsucnUwHhcNMjAxMDIyMTA0ODAwWhcNMjIwMTIyMTA0OTI5WjCCATQxHzAdBgNVBAoMFtCh0LHQtdGA0KLQtdGF0KLQtdGB0YIxCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3NyDQsy4g0JzQvtGB0LrQstCwMRgwFgYDVQQHDA%2FQsy7QnNC%2B0YHQutCy0LAxJjAkBgNVBAkMHdGD0LsuINCS0LDQstC40LvQvtCy0LAsINC0LjE5MRowGAYIKoUDA4EDAQESDDAwNzcwNzA4Mzg5MzEYMBYGBSqFA2QBEg0xMDI3NzAwMTMyMTk1MSEwHwYDVQQDDBjQkNCR0KEg0LHQtdC3INC40LzQtdC90LgxSzBJBgNVBAsMQtCi0LXRgdGC0L7QstC%2B0LUg0L%2FQvtC00YDQsNC30LTQtdC70LXQvdC40LUg0KHQsdC10YDQotC10YXQotC10YHRgjBmMB8GCCqFAwcBAQEBMBMGByqFAwICIwIGCCqFAwcBAQICA0MABEAmfYuzX1XxLTRcOsQWUtFam4OG9B805y8oO%2Bb9x90ZYWiaV9qPfRuJ0IgVB3z3s%2Fx6HUmF4etCGbk0v2s7aLQLo4ICcjCCAm4wPQYHKoUDA3sDAQQyDDBTQlRKMzhEUWHQotC10YHRgl%2FQodCx0LXRgNCR0LjQt9C9XzIwMTLRiNC40YTRgEQwCQYDVR0TBAIwADAdBgNVHQ4EFgQUM2ki7znTdFVluwFGBlEYpjrrvcQwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL3d3d2wuc2JlcmJhbmsucnUvY2EvdGVzdF8yMDEyeDUwOS5jcmwwDgYDVR0PAQH%2FBAQDAgP4MIIBsgYDVR0jBIIBqTCCAaWAFER%2BsfJUNI8vPMx8c81kE7FatnguoYIBf6SCAXswggF3MRswGQYDVQQIDBI3NyDQsy7QnNC%2B0YHQutCy0LAxGDAWBgNVBAcMD9CzLtCc0L7RgdC60LLQsDEaMBgGCCqFAwOBAwEBEgwwMDc3MDcwODM4OTMxJjAkBgNVBAkMHdGD0LsuINCS0LDQstC40LvQvtCy0LAsINC0LjE5MRgwFgYFKoUDZAESDTEwMjc3MDAxMzIxOTUxCzAJBgNVBAYTAlJVMSswKQYDVQQKDCLQn9CQ0J4g0KHQsdC10YDQsdCw0L3QuiAo0KLQldCh0KIpMUMwQQYDVQQLDDrQlNC10L%2FQsNGA0YLQsNC80LXQvdGCINCx0LXQt9C%2B0L%2FQsNGB0L3QvtGB0YLQuCAo0KLQldCh0KIpMT4wPAYDVQQDDDXQn9CQ0J4g0KHQsdC10YDQsdCw0L3QuiDQmtC%2B0YDQvdC10LLQvtC5ICjQotCV0KHQoiBaKTEhMB8GCSqGSIb3DQEJARYSY2FzYnJmQHNiZXJiYW5rLnJ1ggp2jiCd6wxHHf%2ByMAoGCCqFAwcBAQMCA0EAJLkIOn%2FzEIATZ6PdgFsuOAPatfY%2BO4%2FZQbLompRyizcCNt2%2BO0QIQYKhPAXyL94QNeZfr5ddh1znthFL3xrvbw%3D%3D&ctx_handle=xXrKOSKc

Параметры ответа

Параметры ответа (Тип) Ограничение Назначение
data (BASE64) Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+: 15360 байтов бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
часть данных для формирования CMS, содержит информацию о получателе
retcode (ENUM) 2 байт код возврата ф-ии

Пример ответа

HTTP/1.0 200 OK\r\n

Content-Length: 31\r\n

Content-type: text/html\r\n\r\n

data="MIICUgIBADCCAXswggFrMRswGQYDVQQIDBI3NyDQsy7QnNC+0YHQutCy0LAxGDAWBgNVBAcMD9CzLtCc0L7RgdC60LLQsDEaMBgGCCqFAwOBAwEBEgwwMDc3MDcwODM4OTMxJjAkBgNVBAkMHdGD0LsuINCS0LDQstC40LvQvtCy0LAsINC0LjE5MRgwFgYFKoUDZAESDTEwMjc3MDAxMzIxOTUxCzAJBgNVBAYTAlJVMSswKQYDVQQKDCLQn9CQ0J4g0KHQsdC10YDQsdCw0L3QuiAo0KLQldCh0KIpMUMwQQYDVQQLDDrQlNC10L/QsNGA0YLQsNC80LXQvdGCINCx0LXQt9C+0L/QsNGB0L3QvtGB0YLQuCAo0KLQldCh0KIpMTIwMAYDVQQDDCnQn9CQ0J4g0KHQsdC10YDQsdCw0L3QuiDQo9CmICjQotCV0KHQoiBRKTEhMB8GCSqGSIb3DQEJARYSY2FzYnJmQHNiZXJiYW5rLnJ1Agp4mysXZybjyvhIMB8GCCqFAwcBAQEBMBMGByqFAwICIwIGCCqFAwcBAQICBIGsMIGpMCgEIIxzsG0Af4ShXKB+aCQPQDaEJS4gEWnaeatPMi/t4ChSBASSfJgYoH0GCSqFAwcBAgUBAaBmMB8GCCqFAwcBAQEBMBMGByqFAwICIwIGCCqFAwcBAQICA0MABECBkzEtLzyUEh91WlL4yxG2+zEok4tNgPobBfzAXMoLFE3tjo0ZiNEjFVIJQSVzumK6ROBzpvvoREmjDKkmWh5sBAhSNQI2lmQKCg=="&retcode="1"

Шифрование данных

Параметры запроса

Параметры запроса (Тип) Ограничение Назначение
id (ID_FORMAT) ENCIPHER_ID id функции
data (BASE64) Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+: 15360 байтов бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
Для режима КС1: 16777216 байтов бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
данные для шифрования в base64; размер декодированных данных должен быть кратным 8
ctx_handle (HANDLE) 8 байт хендл контекста операции

Пример запроса

POST http://localhost:28016/vpnkeylocal/6LbqY8D4zqDqTMIzeqoBTSto5rS6Ehq3ay/ HTTP/1.1\r\n

Content-Length: 33\r\n\r\n

id=ENCIPHER_ID&data=

ZXlKaGJHY2lPaUpuYjNOME16UXVNVEF0TWpBeE1pSXNJbXRwWkNJNkltVmpOVEV6WkdFMUxUVTRaVFV0TkdZME55MWlPV0V3TFRJellUQTNNVEl5WW1VeFlTSjkuZXlBaVlXTmpiM1Z1ZENJNklDSTBNRGd3TWpneE1EWXdNakF3TURBd01EQXdNU0lzSUNKaFpHMXBjM05wYjI1V1lXeDFaU0k2SUNJd01TSXNJQ0poYlc5MWJuUWlPaUI3SUNKaGJXOTFiblFpT2lBeE1EQXVNREFzSUNKamRYSnlaVzVqZVVOdlpHVWlPaUFpT1RjNElpd2dJbU4xY25KbGJtTjVUbUZ0WlNJNklDSlNWVUlpSUgwc0lDSmhkWFJvVUdWeWMyOXVUbUZ0WlNJNklDTFFuOUMxMFlMUmdOQy0wTElnMEpfUXRkR0MwWUFnMEpfUXRkR0MwWURRdnRDeUlpd2dJbUYxZEdoUVpYSnpiMjVVWld4bVlYZ2lPaUFpTnprM056RXhNVEl5TWpJaUxDQWlZbWxqSWpvZ0lqQTBNREUzTXpZd05DSXNJQWtpWTI5dWRISmhZM1JFWVhSbElqb2dJakl3TWpBdE1UQXRNakVpTENBSkltTnZiblJ5WVdOMFRuVnRZbVZ5SWpvZ0lqZzRNRGN3TmpJeElpd2dJbVJoZEdVaU9pQWlNakF5TUMweE1pMHdNaUlzSUNKcGJtTnZiV1ZVZVhCbFEyOWtaU0lnT2lBeExDQWliRzloYmtGdGIzVnVkQ0k2SUhzZ0ltRnRiM1Z1ZENJNklERXdNQzR3TUN3Z0ltTjFjbkpsYm1ONVEyOWtaU0k2SUNJNU56Z2lMQ0FpWTNWeWNtVnVZM2xPWVcxbElqb2dJbEpWUWlJZ2ZTd2dJbVZ0Y0d4dmVXVmxVMkZzWVhKcFpYTWlPaUJiZXlBaVlXTmpiM1Z1ZENJNklDSTBNRGd4TnpneE1EWXpPREV5TlRJd01UWXdPQ0lzSUNKaGJXOTFiblFpT2lCN0lDSmhiVzkxYm5RaU9pQXhNREF1TURBc0lDSmpkWEp5Wlc1amVVTnZaR1VpT2lBaU9UYzRJaXdnSW1OMWNuSmxibU41VG1GdFpTSTZJQ0pTVlVJaUlIMHNJQ0ozYVhSb2FHVnNaRUZ0YjNWdWRDSWdPaUFpTXk0d01DSXNJQ0ptYVhKemRFNWhiV1VpT2lBaVRrRkxVMGNpTENBaWJHRnpkRTVoYldVaU9pQWlWRXhaUWtaTUlpd2dJbTFwWkdSc1pVNWhiV1VpT2lBaVNsZE9UMDRpSUgwZ1hTd2dJbVY0ZEdWeWJtRnNTV1FpT2lBaU1XRmlaakU1TXprdE1tTTFOQzAwWm1KaExXRTVaV010WldNd09ESTJOR015TjJFNElpd2dJbTF2Ym5Sb0lqb2dJdEM4MExEUXVTSXNJQ0psYlhCc2IzbGxaWE5PZFcxaVpYSWlPaUFpTVNJc0lDQWliM0puVG1GdFpTSTZJQ0xRbU5DZDBKVFFtTkNTMEpqUWxOQ2owSkRRbTlDczBKM1FxOUNaSU5DZjBLRFFsZENVMEpfUW9OQ1kwSjNRbU5DYzBKRFFvdENWMEp2UXJDRFFtTkNTMEpEUW5kQ2UwSklnMEpndUlOQ1lJaXdnSW05eVoxUmhlRTUxYldKbGNpSTZJQ0kzTmpZM056YzVNalV5TlRBaUxDQWllV1ZoY2lJNklDSXlNREU1SWl3Z0ltUnBaMlZ6ZEZOcFoyNWhkSFZ5WlhNaU9pQmJJSHNnSW1KaGMyVTJORVZ1WTI5a1pXUWlPaUFpVFVsSlRXWm5XVXBMYjFwSmFIWmpUa0ZSWTBOdlNVbE5ZbnBEUTBSSGMwTkJVVVY0UkdwQlRVSm5aM0ZvVVUxSVFWRkZRMEZuVlVGTlFYTkhRMU54UjFOSllqTkVVVVZJUVdGRFEwTldaM2RuWjFKQlRVbEpSRGRoUVVSQlowVkRRV2R3TkhGRFdtRjNXVWh0YUdwQldVMUJiMGREUTNGR1FYZGpRa0ZSVFVOTlNVbENZWHBGWWsxQ2EwZEJNVlZGUTBGM1UwNTZZMmN3VEUxMU1FcDZVWFowUjBJd1RISlJjM1JEZDAxU1ozZEdaMWxFVmxGUlNFUkJMMUZ6ZVRkUmJrNURLekJaU0ZGMWRFTjVNRXhCZUVkcVFWbENaMmR4YUZGTlJHZFJUVUpCVWtsTlRVUkJNMDU2UVROTlJHZDZUMFJyZWsxVFdYZEtRVmxFVmxGUlNrUkNNMUpuT1VNM1RHbEVVV3QwUTNjd1RFeFJkVTVETnpCTU4xRnpkRU4zVEVORVVYUkROSGhQVkVWWlRVSlpSMEpUY1VaQk1sRkNSV2N3ZUUxRVNUTk9la0YzVFZSTmVVMVVhekZOVVhOM1ExRlpSRlpSVVVkRmQwcFRWbFJGY2sxRGEwZEJNVlZGUTJkM2FUQktMMUZyVGtObFNVNURhREJNU0ZGMFpFZEJNRXhJVVhOT1F6a3dURzluUzA1RGFUQktXRkZ2WkVOcFMxUkdSRTFGUlVkQk1WVkZRM2QzTmpCS1ZGRjBaRU12TUV4RVVtZE9SME13VEVSUmRrNURNVEJNTTFKbmFVUlJjMlJETVRCTVpsRjJkRU12TUV4RVVtZGtRemt3VERkU1oyUkhRekJNWjJkTFRrTnBNRXBZVVc5a1EybExWRVY1VFVSQlIwRXhWVVZCZDNkd01Fb3ZVV3RPUTJWSlRrTm9NRXhJVVhSa1IwRXdURWhSYzA1RE9UQk1iMmN3UzFCUmNHbEJiekJMVEZGc1pFTm9NRXRKWjFWVGEzaEpWRUZtUW1kcmNXaHJhVWM1ZHpCQ1ExRkZWMFZ0VG1oak1rcDVXbXRDZWxsdFZubFpiVVoxWVhrMWVXUlVRV1ZHZHpCNVRVUkZlRTFVV1hkUFZFMHlUVVJDWVVaM01IbE5la1Y0VFZSWmQwOVVUVE5PUkU1aFRVbElhRTFTVVhkRloxbEVWbEZSUkVSQmRIaGtNbFZuWTFoa2JFbElSak5hVkVWTlRVRnZSMEV4VlVWQ1FYZEVZMWhrYkUxU1FYZEVaMWxFVmxGUmNVUkJaSGhrTWxWblkxaGtiRTFSYzNkRFVWbEVWbEZSUjBWM1NsTldWRVpaVFVaWlIwRXhWVVZEWjNoUU1FcHFVVzVrUTFVd1NtcFJhM1JEV1RCS1ZGRnZPVU5STUVwMlVYSk9RMlF3UzNaUmJWTkVVVzQ1UTJjd1NsaFJiRTVEWmpCTFJGRnRUa05rTUVwcVVXNU9RMUV3UzB4UmJHUkRZakJMZDJjd1NtcFJhM1JEVVRCS00xRnVkRU5UU1U1RFdVeHBSRkZ0UkVWV1RVSk5SMEV4VlVWSlVYZE5ZVmhDVVZsWVNqQmliVlo1VGxSQmQwMVRjM2RMVVZsS1MyOWFTV2gyWTA1QlVXdENSbWg0VkdSWFVuWmtiazV5WVZocmRWVjVOVmRaVlVKMllsZFdibGxUTlhwWmJrcHRURzVLTVUxSE9IZExRVmxKUzI5VlJFSjNSVUpCVVVWM1NFRlpTRXR2VlVSQlowbHFRV2RaU1V0dlZVUkNkMFZDUVdkSlIwSjVjVVpCZDBsRFNIZEZSRkYzUVVWUlQwUk5aeXRHUlRCTE4zVTNUWFJJVjBnMFNXSlFPRFpLYUVWMVQyTk9SRVJEVm00NGIwMVBNVGRhTTBOdVRVUjNjV3RpVGtGcWJsaHViSFZ6UzNSc1pYTjJjM2hPVVdWdWEzUjVaMWx3VkRVeWRtbDViSFZxWjJWcmQyZGxXWGRNVVZsR1MyOVZSRnBIT0VWS1FYZHBWbXhDVDB4VmRHeGxVekZWVkVaTlp6Qk1hbEpuWkVNdk1FdzNVWFU1UXprd1RGaFJkbVJETkRCTVZXZE5ha0ZhUW1kamNXaFJUVVJsZDAxR1FrRTBUVVJHVWsxVmVrRjNUMVJKTVUxVVdUQlJha0ZVUW1kT1ZraFRRVVZFUkVGTFRVRm5SMEpwY1VaQk1sSjRRVlJCWmtKblkzRm9VVTFFWlhkTlFrSkNVVTFGYTBWM1VWVmpkMDFFU1RGak0wWXpXbE5DVWt4cFFsSk1ha0ZWUW1kamNXaFJUVVJsZDAxRlFrRnJSMEo1Y1VaQmQwNDNRbEZSZDBSbldVUldVakJRUVZGSUwwSkJVVVJCWjFBMFRVSXdSMEV4VldSRVoxRlhRa0pSVFZCM1ZsZG5ObFk1UldNclp6azVObVZVUlZKdVlraHZVVGRxUVdaQ1owNVdTRk5OUlVkRVFWZG5RbEpGWm5KSWVWWkVVMUJNZW5wTlpraFFUbHBDVDNoWGNsbzBUR3BCUzBKblozRm9VVTFJUVZGRlJFRm5Ua0pCUkZSR1VXNUZhVkZNT1ZGc1JIaE1NSGxIZGtkVFUzWlJLM0JGUkhrNWNVVTVZVTF3UlV4MWFWZDBTa0ZNVFM5eFVXa3hURVF6YkdSa1JEUmtielZhVlRWbWRpOTZOMHBEVVZGSldUYzBXVUp0VG1OS05rbDNaMmRWVVUxSlNVVjJZVUZFUVdkRlEwRm5jREpxYVVOa05uZDRTRWhtSzNsTlFXOUhRME54UmtGM1kwSkJVVTFEVFVsSlFtUjZSV0pOUW10SFFURlZSVU5CZDFOT2VtTm5NRXhOZFRCS2VsRjJkRWRDTUV4eVVYTjBRM2ROVW1kM1JtZFpSRlpSVVVoRVFTOVJjM2szVVc1T1F5c3dXVWhSZFhSRGVUQk1RWGhIYWtGWlFtZG5jV2hSVFVSblVVMUNRVkpKVFUxRVFUTk9la0V6VFVSbmVrOUVhM3BOVTFsM1NrRlpSRlpSVVVwRVFqTlNaemxETjB4cFJGRnJkRU4zTUV4TVVYVk9RemN3VERkUmMzUkRkMHhEUkZGMFF6UjRUMVJGV1UxQ1dVZENVM0ZHUVRKUlFrVm5NSGhOUkVrelRucEJkMDFVVFhsTlZHc3hUVkZ6ZDBOUldVUldVVkZIUlhkS1UxWlVSWEpOUTJ0SFFURlZSVU5uZDJrd1NpOVJhMDVEWlVsT1EyZ3dURWhSZEdSSFFUQk1TRkZ6VGtNNU1FeHZaMHRPUTJrd1NsaFJiMlJEYVV0VVJrUk5SVVZIUVRGVlJVTjNkell3U2xSUmRHUkRMekJNUkZKblRrZERNRXhFVVhaT1F6RXdURE5TWjJsRVVYTmtRekV3VEdaUmRuUkRMekJNUkZKblpFTTVNRXczVW1ka1IwTXdUR2RuUzA1RGFUQktXRkZ2WkVOcFMxUkZLMDFFZDBkQk1WVkZRWGQzTVRCS0wxRnJUa05sU1U1RGFEQk1TRkYwWkVkQk1FeElVWE5PUXprd1RHOW5NRXB5VVhaMFIwRXdURE5SZEdSRGVUQk1OMUYxVTBGdk1FdE1VV3hrUTJnd1MwbG5WMmxyZUVsVVFXWkNaMnR4YUd0cFJ6bDNNRUpEVVVWWFJXMU9hR015U25sYWEwSjZXVzFXZVZsdFJuVmhlVFY1WkZSQlpVWjNNSGhQUkVFMVRXcG5kMDlFUVRWT1ZGWmhSbmN3ZVU1RVFUVk5hbWQzVDBSQk5VNVVWbUZOU1VsQ1lYcEZZazFDYTBkQk1WVkZRMEYzVTA1NlkyY3dURTExTUVwNlVYWjBSMEl3VEhKUmMzUkRkMDFTWjNkR1oxbEVWbEZSU0VSQkwxRnplVGRSYms1REt6QlpTRkYxZEVONU1FeEJlRWRxUVZsQ1oyZHhhRkZOUkdkUlRVSkJVa2xOVFVSQk0wNTZRVE5OUkdkNlQwUnJlazFUV1hkS1FWbEVWbEZSU2tSQ00xSm5PVU0zVEdsRVVXdDBRM2N3VEV4UmRVNUROekJNTjFGemRFTjNURU5FVVhSRE5IaFBWRVZaVFVKWlIwSlRjVVpCTWxGQ1JXY3dlRTFFU1ROT2VrRjNUVlJOZVUxVWF6Rk5VWE4zUTFGWlJGWlJVVWRGZDBwVFZsUkZjazFEYTBkQk1WVkZRMmQzYVRCS0
wxRnJUa05sU1U1RGFEQk1TRkYwWkVkQk1FeElVWE5PUXprd1RHOW5TMDVEYVRCS1dGRnZaRU5wUzFSR1JFMUZSVWRCTVZWRlEzZDNOakJLVkZGMFpFTXZNRXhFVW1kT1IwTXdURVJSZGs1RE1UQk1NMUpuYVVSUmMyUkRNVEJNWmxGMmRFTXZNRXhFVW1ka1F6a3dURGRTWjJSSFF6Qk1aMmRMVGtOcE1FcFlVVzlrUTJsTFZFVjVUVVJCUjBFeFZVVkJkM2R3TUVvdlVXdE9RMlZKVGtOb01FeElVWFJrUjBFd1RFaFJjMDVET1RCTWIyY3dTMUJSY0dsQmJ6QkxURkZzWkVOb01FdEpaMVZUYTNoSlZFRm1RbWRyY1docmFVYzVkekJDUTFGRlYwVnRUbWhqTWtwNVdtdENlbGx0Vm5sWmJVWjFZWGsxZVdSVVFtMU5RamhIUTBOeFJrRjNZMEpCVVVWQ1RVSk5SMEo1Y1VaQmQwbERTWGRKUjBORGNVWkJkMk5DUVZGSlEwRXdUVUZDUlVOSFl6UllTV3RzZWpRMGJXaGFVazVhUzI5M1dtdE1NRkpVTTNVdldFNU9LMHBVVG5OMFdXMXNjMlZrWnpSWlpHNVFRbWcyTUUxUVpTczRLMWRMVjFsb2J6RXpkR05zYUdkRGMzcElOemxDZVdWQmJqQk9ielJKUWt0cVEwTkJVMWwzU0ZGWlJGWlNNRTlDUWxsRlJrVlNLM05tU2xWT1NUaDJVRTE0T0dNNE1XdEZOMFpoZEc1bmRVMUNPRWRCTVZWa1NYZFJXVTFDWVVGR1VIVTBRM0pTUmtoeFMyeERUamxIU2pSU2VrTTFiVWRJY0ZGTlRVUmpSMEV4VldSSWQxRjNUVU0wZDB4TFFYRnZRMmxIU20xb01HUklRVFpNZVRrelpETmpkV015U214amJVcG9ZbTF6ZFdOdVZYWlpNa1YyVVd4V1JFMXFWWGRQVjNOMVdUTktjMDFFVlVkQ1UzRkdRVEpTZGtKRGQwMUxkRU5TTUV4cVVYVjBSMEV3VEdwUmRqbEhRMGxFVlhWTlEwUlJkVTVIUWpCTUwxRjJkRU0zTUV3elVYUmtRemt3VEdwUmRGTkJlRTFFUVRWQ1oyTnhhRkZOUkdWM1RVSkNRelJOVEVSQmQxRXdSWGROZWxWM1kyUkRhVEJNV0ZKblpFZERNRXczVVhOMFIwd3dUR3RuTUV0UVVYQnBSRkZyT1VObE1FdElVVzlwUVhsTlJFVjVUVUU0UjBFeFZXUkZkMFZDTDNkUlJrMUJUVUpCWmpoM1IwRlpSRlpTTUd4Q1FrVjNSSGRaUlZaU01HeEJRVmxJUzI5VlJFRXpjMFpCVkVGUFFtZE9Wa2hST0VKQlpqaEZRa0ZOUTBGaldYZERaMWxKUzI5VlJFSjNSVUpCZDBsRVVWRkJWblpIYzJaT05EVjVTMHBxWWs5V1lWSjRjVTA0YzA1SVRYSnlOa3g2WkVkRE1GcHdkVTFTTjFCT1dHMVJXV1pXYkhKdVNUSjVSMUYwVVV0Q1pGWnhhM0pCU1ZKcmRWRk9NR3A1TUhGVGIwbzVhR3gxV2sxWlNVTTJla05EUVhWalEwRlJSWGRuWjBZM1RVbEpRbUY2UldKTlFtdEhRVEZWUlVOQmQxTk9lbU5uTUV4TmRUQktlbEYyZEVkQ01FeHlVWE4wUTNkTlVtZDNSbWRaUkZaUlVVaEVRUzlSYzNrM1VXNU9ReXN3V1VoUmRYUkRlVEJNUVhoSGFrRlpRbWRuY1doUlRVUm5VVTFDUVZKSlRVMUVRVE5PZWtFelRVUm5lazlFYTNwTlUxbDNTa0ZaUkZaUlVVcEVRak5TWnpsRE4weHBSRkZyZEVOM01FeE1VWFZPUXpjd1REZFJjM1JEZDB4RFJGRjBRelI0VDFSRldVMUNXVWRDVTNGR1FUSlJRa1ZuTUhoTlJFa3pUbnBCZDAxVVRYbE5WR3N4VFZGemQwTlJXVVJXVVZGSFJYZEtVMVpVUlhKTlEydEhRVEZWUlVObmQya3dTaTlSYTA1RFpVbE9RMmd3VEVoUmRHUkhRVEJNU0ZGelRrTTVNRXh2WjB0T1Eya3dTbGhSYjJSRGFVdFVSa1JOUlVWSFFURlZSVU4zZHpZd1NsUlJkR1JETHpCTVJGSm5Ua2RETUV4RVVYWk9RekV3VEROU1oybEVVWE5rUXpFd1RHWlJkblJETHpCTVJGSm5aRU01TUV3M1VtZGtSME13VEdkblMwNURhVEJLV0ZGdlpFTnBTMVJGZVUxRVFVZEJNVlZGUVhkM2NEQktMMUZyVGtObFNVNURhREJNU0ZGMFpFZEJNRXhJVVhOT1F6a3dURzluTUV0UVVYQnBRVzh3UzB4UmJHUkRhREJMU1dkVlUydDRTVlJCWmtKbmEzRm9hMmxIT1hjd1FrTlJSVmRGYlU1b1l6SktlVnByUW5wWmJWWjVXVzFHZFdGNU5YbGtVVWxMWlV0bmJWZHpSMEkxYjFsM1IwUkJUVUpuWjNGb1VVMUlRVkZGUTBGblZVRnZTVWxDUWxSQlVrSm5iM0pDWjBWRlFXVmpOa0pSU1VaTlVVMURRVkZWZDBWbldVdExkMWxDUWtGSWJrOW5WVU5DZWtWRlFXZExRbk5FUVZsQ1oydHhhR3RwUnpsM01FSkRVVTE0UTNkWlNrdHZXa2xvZG1OT1FWRmpRazFDYzBkRGFYTkhRVkZSUWpWNmIwWkJaMFY0UkZGWlRFdDNXVUpDUVVodVQyZFZRMEZSUlhkSGQxbExTM2RaUWtKQlNHNVBaMVZEUVdwRlRrSm5jM0pDWjBWRlFXVmpOa0pSU1VOQlZFRmlRbWR2Y2tKblJVVkJaV00yUWxGSlJFMVJNRWREZVhOSFFWRlJRalY2YjBaQlowMUNUVUozUjBOVGNVZFRTV0l6UkZGRlNrSlVSVkJHZHpCNVRVUkZlVTFFU1hoT1ZFMHdUa1JPWVUxQ2QwZERhWE5IUVZGUlFqVjZiMFpCWjFGNFJHZDNUVlpGZUZSTlJFRTFUV3BWZUU1cVVrTk5RemhIUTFOeFIxTkpZak5FVVVWS1FrUkZhVUpEUkc1eVdYaE5NVlJDZWxRMWJVbDBka1ZFUkRSVVRreE1NMUpqVlV4alJVUjBhWEpWUzNacGNXMVFlSHBCUzBKblozRm9VVTFJUVZGRlFrRlJVa0ZDZFVsaGNIaFlkSEp2VVUxNGRrbzBVM2RJVWxsQ2JFbDFTMWxrVDBWdlpVbHBSRGxSTm1SVmRrUktkVVV5WmxaSVpXdFNhWGR6UlZwTWEyMUdZalYxUlRaUFpFRk5UVzAwTmpsNGFrWldSVXAzYUdoYVVUMDlJaXdnSW1ObGNuUnBabWxqWVhSbFZYVnBaQ0k2SUNKbFl6VXhNMlJoTlMwMU9HVTFMVFJtTkRjdFlqbGhNQzB5TTJFd056RXlNbUpsTVdFaUlIMGdYU0I5SUNBLk1JSU1mZ1lKS29aSWh2Y05BUWNDb0lJTWJ6Q0NER3NDQVFFeERqQU1CZ2dxaFFNSEFRRUNBZ1VBTUFzR0NTcUdTSWIzRFFFSEFhQ0NDVmd3Z2dSQU1JSUQ3YUFEQWdFQ0FncDRxQ1phd1lIbWhqQVlNQW9HQ0NxRkF3Y0JBUU1DTUlJQmF6RWJNQmtHQTFVRUNBd1NOemNnMExNdTBKelF2dEdCMExyUXN0Q3dNUmd3RmdZRFZRUUhEQS9Rc3k3UW5OQyswWUhRdXRDeTBMQXhHakFZQmdncWhRTURnUU1CQVJJTU1EQTNOekEzTURnek9Ea3pNU1l3SkFZRFZRUUpEQjNSZzlDN0xpRFFrdEN3MExMUXVOQzcwTDdRc3RDd0xDRFF0QzR4T1RFWU1CWUdCU3FGQTJRQkVnMHhNREkzTnpBd01UTXlNVGsxTVFzd0NRWURWUVFHRXdKU1ZURXJNQ2tHQTFVRUNnd2kwSi9Ra05DZUlOQ2gwTEhRdGRHQTBMSFFzTkM5MExvZ0tOQ2kwSlhRb2RDaUtURkRNRUVHQTFVRUN3dzYwSlRRdGRDLzBMRFJnTkdDMExEUXZOQzEwTDNSZ2lEUXNkQzEwTGZRdnRDLzBMRFJnZEM5MEw3UmdkR0MwTGdnS05DaTBKWFFvZENpS1RFeU1EQUdBMVVFQXd3cDBKL1FrTkNlSU5DaDBMSFF0ZEdBMExIUXNOQzkwTG9nMEtQUXBpQW8wS0xRbGRDaDBLSWdVU2t4SVRBZkJna3Foa2lHOXcwQkNRRVdFbU5oYzJKeVprQnpZbVZ5WW1GdWF5NXlkVEFlRncweU1ERXhNVFl3T1RNMk1EQmFGdzB5TXpFeE1UWXdPVE0zTkROYU1JSGhNUlF3RWdZRFZRUUREQXR4ZDJVZ2NYZGxJSEYzWlRFTU1Bb0dBMVVFQkF3RGNYZGxNUkF3RGdZRFZRUXFEQWR4ZDJVZ2NYZGxNUXN3Q1FZRFZRUUdFd0pTVlRGWU1GWUdBMVVFQ2d4UDBKalFuZENVMEpqUWt0Q1kwSlRRbzlDUTBKdlFyTkNkMEt2UW1TRFFuOUNnMEpYUWxOQ2YwS0RRbU5DZDBKalFuTkNRMEtMUWxkQ2IwS3dnMEpqUWt0Q1EwSjNRbnRDU0lOQ1lMaURRbURFVk1CTUdBMVVFSVF3TWFYQlFZWEowYm1WeU5UQXdNU3N3S1FZSktvWklodmNOQVFrQkZoeFRkV1J2ZG5OcmFYa3VVeTVXWVVCdmJXVm5ZUzV6WW5KbUxuSjFNRzh3S0FZSUtvVURCd0VCQVFFd0hBWUhLb1VEQWdJakFnWUlLb1VEQndFQkFnSUdCeXFGQXdJQ0h3RURRd0FFUU9ETWcrRkUwSzd1N010SFdINEliUDg2SmhFdU9jTkREQ1ZuOG9NTzE3WjNDbk1Ed3FrYk5Bam5Ybmx1c0t0bGVzdnN4TlFlbmt0eWdZcFQ1MnZpeWx1amdla3dnZVl3TFFZRktvVURaRzhFSkF3aVZsQk9MVXRsZVMxVVRGTWcwTGpSZ2RDLzBMN1F1OUM5MExYUXZkQzQwTFVnTWpBWkJnY3FoUU1EZXdNRkJBNE1ERlJNVXpBd09USTFNVFkwUWpBVEJnTlZIU0FFRERBS01BZ0dCaXFGQTJSeEFUQWZCZ2NxaFFNRGV3TUJCQlFNRWtFd1FVY3dNREkxYzNGM1pTQlJMaUJSTGpBVUJnY3FoUU1EZXdNRUJBa0dCeXFGQXdON0JRUXdEZ1lEVlIwUEFRSC9CQVFEQWdQNE1CMEdBMVVkRGdRV0JCUU1Qd1ZXZzZWOUVjK2c5OTZlVEVSbmJIb1E3akFmQmdOVkhTTUVHREFXZ0JSRWZySHlWRFNQTHp6TWZIUE5aQk94V3JaNExqQUtCZ2dxaFFNSEFRRURBZ05CQURURlFuRWlRTDlRbER4TDB5R3ZHU1N2UStwRUR5OXFFOWFNcEVMdWlXdEpBTE0vcVFpMUxEM2xkZEQ0ZG81WlU1ZnYvejdKQ1FRSVk3NFlCbU5jSjZJd2dnVVFNSUlFdmFBREFnRUNBZ3AyamlDZDZ3eEhIZit5TUFvR0NDcUZBd2NCQVFNQ01JSUJkekViTUJrR0ExVUVDQXdTTnpjZzBMTXUwSnpRdnRHQjBMclFzdEN3TVJnd0ZnWURWUVFIREEvUXN5N1FuTkMrMFlIUXV0Q3kwTEF4R2pBWUJnZ3FoUU1EZ1FNQkFSSU1NREEzTnpBM01EZ3pPRGt6TVNZd0pBWURWUVFKREIzUmc5QzdMaURRa3RDdzBMTFF1TkM3MEw3UXN0Q3dMQ0RRdEM0eE9URVlNQllHQlNxRkEyUUJFZzB4TURJM056QXdNVE15TVRrMU1Rc3dDUVlEVlFRR0V3SlNWVEVyTUNrR0ExVUVDZ3dpMEovUWtOQ2VJTkNoMExIUXRkR0EwTEhRc05DOTBMb2dLTkNpMEpYUW9kQ2lLVEZETUVFR0ExVUVDd3c2MEpUUXRkQy8wTERSZ05HQzBMRFF2TkMxMEwzUmdpRFFzZEMxMExmUXZ0Qy8wTERSZ2RDOTBMN1JnZEdDMExnZ0tOQ2kwSlhRb2RDaUtURStNRHdHQTFVRUF3dzEwSi9Ra05DZUlOQ2gwTEhRdGRHQTBMSFFzTkM5MExvZzBKclF2dEdBMEwzUXRkQ3kwTDdRdVNBbzBLTFFsZENoMEtJZ1dpa3hJVEFmQmdrcWhraUc5dzBCQ1FFV0VtTmhjMkp5WmtCelltVnlZbUZ1YXk1eWRUQWVGdzB4T0RBNU1qZ3dPREE1TlRWYUZ3MHlOREE1TWpnd09EQTVOVFZhTUlJQmF6RWJNQmtHQTFVRUNBd1NOemNnMExNdTBKelF2dEdCMExyUXN0Q3dNUmd3RmdZRFZRUUhEQS9Rc3k3UW5OQyswWUhRdXRDeTBMQXhHakFZQmdncWhRTURnUU1CQVJJTU1EQTNOekEzTURnek9Ea3pNU1l3SkFZRFZRUUpEQjNSZzlDN0xpRFFrdEN3MExMUXVOQzcwTDdRc3RDd0xDRFF0QzR4T1RFWU1CWUdCU3FGQTJRQkVnMHhNREkzTnpBd01UTXlNVGsxTVFzd0NRWURWUVFHRXdKU1ZURXJNQ2tHQTFVRUNnd2kwSi9Ra05DZUlOQ2gwTEhRdGRHQTBMSFFzTkM5MExvZ0tOQ2kwSlhRb2RDaUtURkRNRUVHQTFVRUN3dzYwSlRRdGRDLzBMRFJnTkdDMExEUXZOQzEwTDNSZ2lEUXNkQzEwTGZRdnRDLzBMRFJnZEM5MEw3UmdkR0MwTGdnS05DaTBKWFFvZENpS1RFeU1EQUdBMVVFQXd3cDBKL1FrTkNlSU5DaDBMSFF0ZEdBMExIUXNOQzkwTG9nMEtQUXBpQW8wS0xRbGRDaDBLSWdVU2t4SVRBZkJna3Foa2lHOXcwQkNRRVdFbU5oYzJKeVprQnpZbVZ5WW1GdWF5NXlkVEJtTUI4R0NDcUZBd2NCQVFFQk1CTUdCeXFGQXdJQ0l3SUdDQ3FGQXdjQkFRSUNBME1BQkVDR2M0WElrbHo0NG1oWlJOWktvd1prTDBSVDN1L1hOTitKVE5zdFltbHNlZGc0WWRuUEJoNjBNUGUrOCtXS1dZaG8xM3RjbGhnQ3N6SDc5QnllQW4wTm80SUJLakNDQVNZd0hRWURWUjBPQkJZRUZFUitzZkpVTkk4dlBNeDhjODFrRTdGYXRuZ3VNQjhHQTFVZEl3UVlNQmFBRlB1NENyUkZIcUtsQ045R0o0UnpDNW1HSHBRTU1EY0dBMVVkSHdRd01DNHdMS0Fxb0NpR0ptaDBkSEE2THk5M2QzY3VjMkpsY21KaGJtc3VjblV2WTJFdlFsVkRNalV3T1dzdVkzSnNNRFVHQlNxRkEyUnZCQ3dNS3RDUjBMalF1dEdBMExqUXY5R0NJRFV1TUNEUXVOR0IwTC9RdnRDNzBMM1F0ZEM5MExqUXRTQXhNREE1QmdjcWhRTURld01CQkM0TUxEQXdRMEV3TXpVd2NkQ2kwTFhSZ2RHQzBMN1FzdEdMMExrZzBLUFFwaURRazlDZTBLSFFvaUF5TURFeU1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0dBWURWUjBsQkJFd0R3WUVWUjBsQUFZSEtvVURBM3NGQVRBT0JnTlZIUThCQWY4RUJBTUNBY1l3Q2dZSUtvVURCd0VCQXdJRFFRQVZ2R3NmTjQ1eUtKamJPVmFSeHFNOHNOSE1ycjZMemRHQzBacHVNUjdQTlhtUVlmVmxybkkyeUdRdFFLQmRWcWtyQUlSa3VRTjBqeTBxU29KOWhsdVpNWUlDNnpDQ0F1Y0NBUUV3Z2dGN01JSUJhekViTUJrR0ExVUVDQXdTTnpjZzBMTXUwSnpRdnRHQjBMclFzdEN3TVJnd0ZnWURWUVFIREEvUXN5N1FuTkMrMFlIUXV0Q3kwTEF4R2pBWUJnZ3FoUU1EZ1FNQkFSSU1NREEzTnpBM01EZ3pPRGt6TVNZd0pBWURWUVFKREIzUmc5QzdMaURRa3RDdzBMTFF1TkM3MEw3UXN0Q3dMQ0RRdEM0eE9URVlNQllHQlNxRkEyUUJFZzB4TURJM056QXdNVE15TVRrMU1Rc3dDUVlEVlFRR0V3SlNWVEVyTUNrR0ExVUVDZ3dpMEovUWtOQ2VJTkNoMExIUXRkR0EwTEhRc05DOTBMb2dLTkNpMEpYUW9kQ2lLVEZETUVFR0ExVUVDd3c2MEpUUXRkQy8wTERSZ05HQzBMRFF2TkMxMEwzUmdpRFFzZEMxMExmUXZ0Qy8wTERSZ2RDOTBMN1JnZEdDMExnZ0tOQ2kwSlhRb2RDaUtURXlNREFHQTFVRUF3d3AwSi9Ra05DZUlOQ2gwTEhRdGRHQTBMSFFzTkM5MExvZzBLUFFwaUFvMEtMUWxkQ2gwS0lnVVNreElUQWZCZ2txaGtpRzl3MEJDUUVXRW1OaGMySnlaa0J6WW1WeVltRnVheTV5ZFFJS2VLZ21Xc0dCNW9Zd0dEQU1CZ2dxaFFNSEFRRUNBZ1VBb0lJQkJUQVJCZ29yQmdFRUFlYzZCUUlGTVFNQ0FRVXdFZ1lLS3dZQkJBSG5PZ1VDQnpFRUFnS0JzekFZQmdrcWhraUc5dzBCQ1FNeEN3WUpLb1pJaHZjTkFRY0JNQnNHQ2lzR0FRUUI1em9GQWdFeERRWUxLd1lCQkFIbk9nVUNBUUV3R3dZS0t3WUJCQUhuT2dVQ0FqRU5CZ3NyQmdFRUFlYzZCUUlDQVRBYkJnb3JCZ0VFQWVjNkJRSURNUTBHQ3lzR0FRUUI1em9GQWdNQk1Cd0dDU3FHU0liM0RRRUpCVEVQRncweU1ERXlNREl4TlRNM01qVmFNQndHQ2lzR0FRUUI1em9GQWdReERnd01WRXhUTURBNU1qVXhOalJDTUM4R0NTcUdTSWIzRFFFSkJERWlCQ0RQc0UxTjRmeENPZ1l6Nk8yRTk0bEIveDZNNXFYWVY3c3ZWVjFXdFAwY1NEQUtCZ2dxaFFNSEFRRUJBUVJBUkxjeExhQXQyaFBrR3NtSFFTUFFPSklOMkZIZ3R0dUFWdnFZVzFoelFqSkpJM2ZXS3pDVWdJK0FuU1RPaE4wVStFVHdxY1dLQlo4VEE0TmNUVStXUmc9PQ

&ctx_handle=xXrKOSKc

Параметры ответа

Параметры ответа (Тип) Ограничение Назначение
enciphered_blob (BASE64) Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+: 15360 байтов бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
часть зашифрованных данных для CMS
retcode (ENUM) 2 байт код возврата функции

Пример ответа

HTTP/1.0 200 OK\r\n

Content-Length: xxx\r\n

Content-type: text/html\r\n\r\n

enciphered_blob="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"

&retcode="1"

Получить части для CMS

Параметры запроса

Параметры запроса (Тип) Ограничение Назначение
id (ID_FORMAT) GET_ENCIPHER_CMS_ID id функции
ctx_handle (HANDLE) 8 байт хендл контекста операции

Пример запроса

POST http://localhost:28016/vpnkeylocal/6LbqY8D4zqDqTMIzeqoBTSto5rS6Ehq3ay/ HTTP/1.1\r\n

Content-Length: 33\r\n\r\n

id=GET_ENCIPHER_CMS_ID&ctx_handle=xXrKOSKc

Параметры ответа

Параметры ответа (Тип) Ограничение Назначение
head (BASE64) 2048 байт данные начала CMS в base64
suffix (BASE64) 2048 байт данные суффикса CMS в base64
retcode (ENUM) 2 байт код возврата ф-ии

Пример ответа

HTTP/1.0 200 OK\r\n

Content-Length: xxx\r\n

Content-type: text/html\r\n\r\n

head="MIIvQwYJKoZIhvcNAQcDoIIvNDCCLzACAQAxggJW"&suffix="MIIszwYJKoZIhvcNAQcBMB0GBiqFAwICFTATBAimJbSBo3saywYHKoUDAgIfAYCCLKE="&retcode="1"

4. Формирование CMS с использованием зашифрованных данных

Формирование CMS с использованием зашифрованных данных производится в соответствии со схемой:

Шифрованные_данные_в_формате_CMS = head +[Recipient_info] + suffix + зашифрованные данные

Recipient_info – это ответ на запрос id=ADD_RECIPIENT_Y_ID.

5. Полученные шифрованные значения JWE Protected Header и JWE Ciphertext

Пример Protected Header

eyJ0eXAiOiAiSk9TRSIsICJlbmMiIDogImdvc3QyODE0Ny04OSIsICJhbGciIDogImRpciJ9

Пример Ciphertext

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

Пример JWE Compact Serialization

BASE64URL(JWE Protected Header)... BASE64URL(JWE Ciphertext).

Тип содержимого JOSE в представлении JWE Compact Serialization RFC 7516: JSON Web Encryption (JWE)
Тип содержимого JOSE в представлении JWS Compact Serialization RFC 7515: JSON Web Signature (JWS).

Расшифрование ответа

Для того, чтобы получить ответ в зашифрованном виде необходимо в запросе передать http-заголовок Accept со значением application/jose, тогда сформированный не ошибочный ответ (код ответа 200) будет представлен в JOSE в представлении JWE Compact Serialization. При этом в ответе также будет содержаться http-заголовок Content-Type со значением application/jose.

**JWE Compact Serialization состоит из 5 частей, разделитель между частями - символ '.'
В нашем случае структура JWE Compact Serialization будет иметь следующий вид:

BASE64URL(UTF8(JWE Protected Header)) || '.' '.' '.' || BASE64URL(JWE Ciphertext) || '.'

Защищенный заголовок (Protected Header) будет иметь следующий вид:

{

"enc": "gost28147-89",

"alg":"dir"

}

Параметр enc содержит алгоритм, по которому был зашифрован ответ, в нашем случае - gost28147-89.

Пример JWE Compact Serialization

eyJlbmMiOiJnb3N0MjgxNDctODkiLCJhbGciOiJkaXIifQ...MIIIWAYJKoZIhvcNAQcDoIIISTCCCEUCAQCgggSfoII

EmzCCBJcwggRGoAMCAQICCneGpLu1iLaqSBEwCAYGKoUDAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3Q

продолжение Ciphertext

bgaMxFrlN8CSJ65TgoTwh442bxjC2mDmEdVvjirq76gC6D6SLmWfvuUf0wP06twKI1bFodSWHJlvpfgPqnRu-LN-rOZQBGuyMKO5dXFIg.

Пример декодированного (из BASE64URL) Protected Header

{

"enc": "gost28147-89",

"alg": "dir"

}

Описание алгоритма расшифрования

Для того, чтобы расшифровать JWE Ciphertext необходимо выполнить следующие действия на VPNKeyTLS:

  • Проинициализировать устройство (INIT_DECIPHER_ID) путем передачи части с заголовком.
  • Внести данные для расшифрования (DECIPHER_ID – 1 или более вызовов) и получить в ответ расшифрованные данные.

Запросы необходимо отправлять на http://localhost:28016/vpnkeylocal//, где SID2-идентификатор сессии, получаемый после перехода в бизнес-систему.

Инициализация расшифрования

Параметры запроса

Параметры запроса Тип Ограничение Назначение
id ID_FORMAT INIT_DECIPHER_ID id функции
head BASE64 Для прошивок 399+: 2048 URL-encoded байтов base64;
Для прошивок 500+: 2048 байт бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
данные начала CMS в base64
obj_id HANDLE 8 байт id сертификата для расшифрования
с версии 500 игнорируется
mode ENUM 1, 2 Стандарт крипто операции: КС1 - токен только генерирует ключевую пару, данные шифруются "стартом.ехе" / КС2 - токен генерирует ключевую пару и шифрует данные.
Только нечётные версии 500+; Опционально; по умолчанию: 2.

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/

POST data:

id=INIT_DECIPHER_ID&head=Полученное значение&mode=1

Параметры ответа

Параметры ответа Тип Ограничение Назначение
retcode ENUM 2 байт код возврата функции
ctx_handle HANDLE 8 байт хендл контекста операции
body_displ NUMBER 2^32 - 1 размер (смещение) начала CMS в чистом виде (до кодирования base64)

Пример ответа

ctx_handle="AU6BTBjL"&body_displ="0"&retcode="1"

Расшифрование данных

Параметры запроса

Параметры запроса Тип Ограничение Назначение
id ID_FORMAT DECIPHER_ID id функции
data BASE64 Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+ чётных версий и нечётных ранее 507:
для режима КС1: 15360 байтов бинарных данных; для режима КС2: 16777216 байтов бинарных данных;
для нечётных 507 и выше: 2^64 - 1 байтов бинарных данных; (размер base64, требуемый для их кодировки, не ограничен)
данные для расшифрования в base64; размер декодированных данных должен быть кратным 8, начиная с размера (смещения) начала CMS в чистом виде (до кодирования base64)
ctx_handle HANDLE 8 байт хендл контекста операции

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/

POST data:

id=DECIPHER_ID&data=Полученное значение&ctx_handle=AU6BTBjL

Параметры ответа

Параметры ответа Тип Ограничение Назначение
retcode ENUM 2 байт код возврата функции
deciphered_blob BASE64 Соответствует размеру поданного на вход поля "data" часть расшифрованных данных

Пример ответа

deciphered_blob="Полученное значение"&retcode="1"

После декодирования из BASE64URL параметра ответа deciphered_blob получаем ответ в виде JWS.

Описание ошибок

Код возврата Описание кода возврата Причина возникновения
400 DESERIALIZATION_FAULT
Неверный формат запроса Неверный формат запроса
VALIDATION_FAULT
Ошибка валидации Ошибка валидации данных запроса с указанием некорректных значений. Значения полей модели или параметров запроса не соответствуют допустимым и определённым в модели.
WORKFLOW_FAULT
Не указан идентификатор сертификата подписи Не указан идентификатор сертификата подписи(параметр kid заголовка JWS)
Некорректный формат параметра kid заголовка JWS Некорректный формат параметра kid заголовка JWS(ожидается UUID)
SIGN_CHECK_EXCEPTION
Подлинность подписи не установлена/Сертификат не обнаружен или не является активным Ошибка возникает, если не удалось установить подлинность подписи
500 UNKNOWN_EXCEPTION
Внутренняя ошибка сервера
503 UNAVAILABLE_RESOURCE_EXCEPTION

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней