syntax = "proto3"; package bridge_and_joins.crypto.v1; option go_package = "git.zetit.ru/zuevav/Bridge-and-Join-s/internal/cryptocli/cryptopb;cryptopb"; option java_package = "ru.zetit.bridgeandjoins.crypto.v1"; option java_multiple_files = true; // CryptoService — серверная криптография по ГОСТ через КриптоПро JCP. // Слушает на Unix Domain Socket (по умолчанию /run/bj/crypto.sock). service CryptoService { // Проверка XMLDSig-подписи (ГОСТ или RSA). Возвращает сведения о // подписанте: CN, ИНН (если есть), срок действия сертификата. rpc VerifyXMLDSig(VerifyRequest) returns (VerifyResponse); // Подпись XML по ГОСТ — для резервного канала WS ONYX и для // серверной подписи действий оператора в admin-ui. rpc SignXMLDSig(SignRequest) returns (SignResponse); // Health-check. rpc Health(HealthRequest) returns (HealthResponse); // Activate — переинициализирует провайдер Валидаты на указанный // профиль из pki1.conf. Если profile пуст — переходит в // VCERT_InitMinimal (без доступа к ПСП/ЛСП/ССС). Не требует // перезапуска сайдкара. rpc Activate(ActivateRequest) returns (ActivateResponse); // Shutdown — корректно завершает процесс сайдкара (System.exit(2) // после отправки ответа). systemd с Restart=on-failure поднимет // его снова через RestartSec секунд. Используется для UI-кнопки // «Перезапустить crypto-service» без sudo. rpc Shutdown(ShutdownRequest) returns (ShutdownResponse); } message ActivateRequest { // Имя профиля в pki1.conf. Пустая строка = minimal mode. string profile = 1; } message ActivateResponse { // true если провайдер успешно (пере)инициализирован. bool ok = 1; // Имя активного провайдера ("validata" / "stub"). string provider = 2; // Имя активного профиля (пусто для minimal). string profile = 3; // Сообщение о результате (для UI). string message = 4; } message ShutdownRequest {} message ShutdownResponse { // true означает «запрос принят, процесс завершится через ~500ms». bool ok = 1; } message VerifyRequest { // Целиком подписанный XML. bytes payload = 1; // Профиль ключей и сертификатов: "guest-gost" | "test3-gost" | // "prod-gost" | "guest-rsa" | ... — определяет хранилище и trust store. string profile = 2; } message VerifyResponse { // Прошла ли проверка. bool valid = 1; // CN из сертификата подписанта. string signer_cn = 2; // ИНН из сертификата (если присутствует в OID 1.2.643.3.131.1.1). string signer_inn = 3; // Серийный номер сертификата (hex). string serial = 4; // Срок действия сертификата (unix epoch, секунды). int64 not_before = 5; int64 not_after = 6; // Тексты ошибок проверки (если valid=false). repeated string errors = 7; } message SignRequest { // Канонизированный XML, который нужно подписать. bytes payload = 1; // Алиас ключа в JCP-keystore. string key_alias = 2; // Профиль (тот же что у Verify). string profile = 3; } message SignResponse { // Подписанный XML (с детачированной или встроенной подписью — // зависит от профиля). bytes signed_xml = 1; } message HealthRequest {} message HealthResponse { bool ok = 1; string version = 2; // Активный провайдер криптографии: "cryptopro" | "validata" | "vipnet" | "stub". string provider = 3; }