<?php
// GENERATED CODE -- DO NOT EDIT!

// Original file comments:
//
// Сервис для генерации и хранения приватных и публичных ключей, в данном случае необходимых для подписи токена, находится в DMZ зоне, непосредственно не участвует в сценариях Партнёра
namespace Keyapis\Kms\V1;

/**
 * Сервис KMS
 */
class KmsServiceClient extends \Grpc\BaseStub {

    /**
     * @param string $hostname hostname
     * @param array $opts channel options
     * @param \Grpc\Channel $channel (optional) re-use channel object
     */
    public function __construct($hostname, $opts, $channel = null) {
        parent::__construct($hostname, $opts, $channel);
    }

    /**
     * Метод генерации пары ключей.
     * Генерирует публичный и приватный ключи.
     * Приватный ключ шифруется алгоритмом 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
     * @param \Keyapis\Kms\V1\PostKmsKeyGenerateRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostKmsKeyGenerate(\Keyapis\Kms\V1\PostKmsKeyGenerateRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.kms.v1.KmsService/PostKmsKeyGenerate',
        $argument,
        ['\Keyapis\Kms\V1\PostKmsKeyGenerateResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения ключей.
     * Возвращает три последних ключа отсортированных по created_at DESC.
     * Используется в административном интерфейсе, для отображения даты выпуска последней пары ключей.
     * Сценарий использвания: https://confluence.rt.ru/pages/viewpage.action?pageId=682907591.
     * Метод доступен для: admin, manager, service
     * @param \Keyapis\Kms\V1\GetKmsKeyListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetKmsKeyList(\Keyapis\Kms\V1\GetKmsKeyListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.kms.v1.KmsService/GetKmsKeyList',
        $argument,
        ['\Keyapis\Kms\V1\GetKmsKeyListResponse', 'decode'],
        $metadata, $options);
    }

}
