# Протокол

## Оглавление

- [keyapis/kms/v1/keyapis_kms_key_v1.proto](#keyapis_kms_v1_keyapis_kms_key_v1-proto)
    - [KmsService](#keyapis-kms-v1-KmsService)
  
    - [GetKmsKeyListRequest](#keyapis-kms-v1-GetKmsKeyListRequest)
    - [GetKmsKeyListResponse](#keyapis-kms-v1-GetKmsKeyListResponse)
    - [KeyInfo](#keyapis-kms-v1-KeyInfo)
    - [KeyInfo.GeneratingError](#keyapis-kms-v1-KeyInfo-GeneratingError)
    - [KeyInfo.GeneratingError.PublishingKeyError](#keyapis-kms-v1-KeyInfo-GeneratingError-PublishingKeyError)
    - [KeyInfo.GeneratingError.TransactionError](#keyapis-kms-v1-KeyInfo-GeneratingError-TransactionError)
    - [PostKmsKeyGenerateRequest](#keyapis-kms-v1-PostKmsKeyGenerateRequest)
    - [PostKmsKeyGenerateResponse](#keyapis-kms-v1-PostKmsKeyGenerateResponse)
    - [PostKmsKeyGenerateResponse.Error](#keyapis-kms-v1-PostKmsKeyGenerateResponse-Error)
  


## [Схема классов](/svg/protos/key/keyapis/kms/v1/keyapis_kms_key_v1.proto.svg)
<a href="/svg/protos/key/keyapis/kms/v1/keyapis_kms_key_v1.proto.svg"><img src="/svg/protos/key/keyapis/kms/v1/keyapis_kms_key_v1.proto.svg" alt="/svg/protos/key/keyapis/kms/v1/keyapis_kms_key_v1.proto.svg" style="height:100%;"></a>




<a name="keyapis_kms_v1_keyapis_kms_key_v1-proto"></a>

## [keyapis/kms/v1/keyapis_kms_key_v1.proto](/protos/key/keyapis/kms/v1/keyapis_kms_key_v1.proto)
Сервис для генерации и хранения приватных и публичных ключей, в данном случае необходимых для подписи токена, находится в DMZ зоне, непосредственно не участвует в сценариях Партнёра


<a name="keyapis-kms-v1-KmsService"></a>

### KmsService
 Сервис KMS

| Название метода | Описание | Тип запроса | Тип ответа |
| --------------- | -------- | ----------- | -----------|
| <a id="keyapis-kms-v1-PostKmsKeyGenerate"></a> [PostKmsKeyGenerate](#keyapis-kms-v1-PostKmsKeyGenerate) | Метод генерации пары ключей. Генерирует публичный и приватный ключи. Приватный ключ шифруется алгоритмом AES-GCM и сохранятеся в колонке kms.key_infos.encrypted_private_key. Формат хранения приватного ключа - строковое представление JSON: состоит из переменных: - Nonce: Number used once - представляет собой уникальный набор битов, используется один раз при шифровании блока данных в режиме GCM. - EncryptedString: зашифрованный приватный ключ в формате DER. - Tag: Message Authentication Code, используется для проверки целостности и подлинности данных после их расшифровки. Публичный ключ сохранятеся в колонке kms.key_infos.public_key в формате DER и передаётся в сервис JWKS методом PostKey. Логика работы метода: https://confluence.rt.ru/pages/viewpage.action?pageId=664695357. Метод доступен для: admin, manager, service | [keyapis.kms.v1.PostKmsKeyGenerateRequest](#keyapis-kms-v1-PostKmsKeyGenerateRequest) | [keyapis.kms.v1.PostKmsKeyGenerateResponse](#keyapis-kms-v1-PostKmsKeyGenerateResponse) |
| <a id="keyapis-kms-v1-GetKmsKeyList"></a> [GetKmsKeyList](#keyapis-kms-v1-GetKmsKeyList) | Метод получения ключей. Возвращает три последних ключа отсортированных по created_at DESC. Используется в административном интерфейсе, для отображения даты выпуска последней пары ключей. Сценарий использвания: https://confluence.rt.ru/pages/viewpage.action?pageId=682907591. Метод доступен для: admin, manager, service | [keyapis.kms.v1.GetKmsKeyListRequest](#keyapis-kms-v1-GetKmsKeyListRequest) | [keyapis.kms.v1.GetKmsKeyListResponse](#keyapis-kms-v1-GetKmsKeyListResponse) stream |

 <!-- end services -->


<a name="keyapis-kms-v1-GetKmsKeyListRequest"></a>


### [GetKmsKeyListRequest](#keyapis-kms-v1-GetKmsKeyListRequest)
 Запрос на получение ключей






<a name="keyapis-kms-v1-GetKmsKeyListResponse"></a>


### [GetKmsKeyListResponse](#keyapis-kms-v1-GetKmsKeyListResponse)
 Ответ на запрос на получение ключей


| Поле | Описание | Тип | Признак |
| ---- | -------- | --- | ------- |
| <a id="keyapis-kms-v1-GetKmsKeyListResponse-data"></a> [data](#keyapis-kms-v1-GetKmsKeyListResponse-data) | Ключ. В ключе должен отсутсвовать encrypted_private_key |  optional  [keyapis.kms.v1.KeyInfo](#keyapis-kms-v1-KeyInfo) | <nil>|






<a name="keyapis-kms-v1-KeyInfo"></a>


### [KeyInfo](#keyapis-kms-v1-KeyInfo)
 Пара ключей.
# Описание модели


| Поле | Описание | Тип | Признак |
| ---- | -------- | --- | ------- |
| <a id="keyapis-kms-v1-KeyInfo-id"></a> [id](#keyapis-kms-v1-KeyInfo-id) | Идентификатор. # Тип: Guid |    [string](#scalar-types) | REQUIRED|
| <a id="keyapis-kms-v1-KeyInfo-public_key"></a> [public_key](#keyapis-kms-v1-KeyInfo-public_key) | Публичный ключ. # Диапазон: 0..800 |    [string](#scalar-types) | OUTPUT_ONLY|
| <a id="keyapis-kms-v1-KeyInfo-encrypted_private_key"></a> [encrypted_private_key](#keyapis-kms-v1-KeyInfo-encrypted_private_key) | Приватный ключ в зашифрованном виде. # Диапазон: 0..4000 |    [string](#scalar-types) | OUTPUT_ONLY|
| <a id="keyapis-kms-v1-KeyInfo-created_at"></a> [created_at](#keyapis-kms-v1-KeyInfo-created_at) | Дата и время создания ключа |    [google.protobuf.Timestamp](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | OUTPUT_ONLY|
| <a id="keyapis-kms-v1-KeyInfo-expired_at"></a> [expired_at](#keyapis-kms-v1-KeyInfo-expired_at) | Дата и время истечения жизни ключа |    [google.protobuf.Timestamp](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | OUTPUT_ONLY|






<a name="keyapis-kms-v1-KeyInfo-GeneratingError"></a>


### [KeyInfo.GeneratingError](#keyapis-kms-v1-KeyInfo-GeneratingError)
 Ошибка генерации


| Поле | Описание | Тип | Признак |
| ---- | -------- | --- | ------- |
| <a id="keyapis-kms-v1-KeyInfo-GeneratingError-transaction"></a> [transaction](#keyapis-kms-v1-KeyInfo-GeneratingError-transaction) | Ошибка генерации ключа в сервисе KMS |  optional  [keyapis.kms.v1.KeyInfo.GeneratingError.TransactionError](#keyapis-kms-v1-KeyInfo-GeneratingError-TransactionError) | <nil>|
| <a id="keyapis-kms-v1-KeyInfo-GeneratingError-publishing"></a> [publishing](#keyapis-kms-v1-KeyInfo-GeneratingError-publishing) | Ошибка сохранения публичного ключа в сервисе JWKS |  optional  [keyapis.kms.v1.KeyInfo.GeneratingError.PublishingKeyError](#keyapis-kms-v1-KeyInfo-GeneratingError-PublishingKeyError) | <nil>|






<a name="keyapis-kms-v1-KeyInfo-GeneratingError-PublishingKeyError"></a>


### [KeyInfo.GeneratingError.PublishingKeyError](#keyapis-kms-v1-KeyInfo-GeneratingError-PublishingKeyError)
 Ошибка сохранения публичного ключа в сервисе JWKS.
Причины:
- Отсутсвует связанность с сервисом JWKS






<a name="keyapis-kms-v1-KeyInfo-GeneratingError-TransactionError"></a>


### [KeyInfo.GeneratingError.TransactionError](#keyapis-kms-v1-KeyInfo-GeneratingError-TransactionError)
 Ошибка генерации ключа в сервисе KMS.
Причины:
- Отсутсвует связанность с базой данных






<a name="keyapis-kms-v1-PostKmsKeyGenerateRequest"></a>


### [PostKmsKeyGenerateRequest](#keyapis-kms-v1-PostKmsKeyGenerateRequest)
 Запрос на генерацию пары ключей






<a name="keyapis-kms-v1-PostKmsKeyGenerateResponse"></a>


### [PostKmsKeyGenerateResponse](#keyapis-kms-v1-PostKmsKeyGenerateResponse)
 Ответ на запрос на генерацию пары ключей


| Поле | Описание | Тип | Признак |
| ---- | -------- | --- | ------- |
| <a id="keyapis-kms-v1-PostKmsKeyGenerateResponse-data"></a> [data](#keyapis-kms-v1-PostKmsKeyGenerateResponse-data) | Идентификатор. # Тип: Guid |  optional  [string](#scalar-types) | <nil>|
| <a id="keyapis-kms-v1-PostKmsKeyGenerateResponse-error"></a> [error](#keyapis-kms-v1-PostKmsKeyGenerateResponse-error) | Ошибка |  optional  [keyapis.kms.v1.PostKmsKeyGenerateResponse.Error](#keyapis-kms-v1-PostKmsKeyGenerateResponse-Error) | <nil>|






<a name="keyapis-kms-v1-PostKmsKeyGenerateResponse-Error"></a>


### [PostKmsKeyGenerateResponse.Error](#keyapis-kms-v1-PostKmsKeyGenerateResponse-Error)
 Ошибка


| Поле | Описание | Тип | Признак |
| ---- | -------- | --- | ------- |
| <a id="keyapis-kms-v1-PostKmsKeyGenerateResponse-Error-generating"></a> [generating](#keyapis-kms-v1-PostKmsKeyGenerateResponse-Error-generating) | Ошибка генерации ключей в сервисе KMS |  optional  [keyapis.kms.v1.KeyInfo.GeneratingError](#keyapis-kms-v1-KeyInfo-GeneratingError) | <nil>|





 <!-- end messages -->

 <!-- end enums -->

 <!-- end HasExtensions -->



## Скалярные типы значений
<a id="scalar-types"></a>

| .proto Type | Примечание | Python | Go | Ruby | C# | C++ | Java | PHP |
| ----------- | ---------- | ------ | -- | ---- | -- | --- | ---- | --- |
| [double](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) |  | float | float64 | Float | double | double | double | float |
| [float](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) |  | float | float32 | Float | float | float | float | float |
| [int32](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int | int32 | Bignum or Fixnum (as required) | int | int32 | int | integer |
| [int64](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int/long | int64 | Bignum | long | int64 | long | integer/string |
| [uint32](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Uses variable-length encoding. | int/long | uint32 | Bignum or Fixnum (as required) | uint | uint32 | int | integer |
| [uint64](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Uses variable-length encoding. | int/long | uint64 | Bignum or Fixnum (as required) | ulong | uint64 | long | integer/string |
| [sint32](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int | int32 | Bignum or Fixnum (as required) | int | int32 | int | integer |
| [sint64](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int/long | int64 | Bignum | long | int64 | long | integer/string |
| [fixed32](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | int | uint32 | Bignum or Fixnum (as required) | uint | uint32 | int | integer |
| [fixed64](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | int/long | uint64 | Bignum | ulong | uint64 | long | integer/string |
| [sfixed32](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Always four bytes. | int | int32 | Bignum or Fixnum (as required) | int | int32 | int | integer |
| [sfixed64](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | Always eight bytes. | int/long | int64 | Bignum | long | int64 | long | integer/string |
| [bool](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) |  | boolean | bool | TrueClass/FalseClass | bool | bool | boolean | boolean |
| [string](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | A string must always contain UTF-8 encoded or 7-bit ASCII text. | str/unicode | string | String (UTF-8) | string | string | String | string |
| [bytes](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf/) | May contain any arbitrary sequence of bytes. | str | []byte | String (ASCII-8BIT) | ByteString | string | ByteString | string |

