<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/cloud/kms/v1/hsm_management.proto

namespace Google\Cloud\Kms\V1;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

/**
 * A
 * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
 * represents a proposal to perform an operation on a
 * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
 *
 * Generated from protobuf message <code>google.cloud.kms.v1.SingleTenantHsmInstanceProposal</code>
 */
class SingleTenantHsmInstanceProposal extends \Google\Protobuf\Internal\Message
{
    /**
     * Identifier. The resource name for this
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance] in
     * the format `projects/&#42;&#47;locations/&#42;&#47;singleTenantHsmInstances/&#42;&#47;proposals/&#42;`.
     *
     * Generated from protobuf field <code>string name = 1 [(.google.api.field_behavior) = IDENTIFIER];</code>
     */
    protected $name = '';
    /**
     * Output only. The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * was created.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp create_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $create_time = null;
    /**
     * Output only. The state of the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.State state = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $state = 0;
    /**
     * Output only. The root cause of the most recent failure. Only present if
     * [state][google.cloud.kms.v1.SingleTenantHsmInstanceProposal.state] is
     * [FAILED][SingleTenantHsmInstanceProposal.FAILED].
     *
     * Generated from protobuf field <code>string failure_reason = 4 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $failure_reason = '';
    /**
     * Output only. The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * was deleted.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp delete_time = 15 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $delete_time = null;
    /**
     * Output only. The time at which the soft-deleted
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * will be permanently purged. This field is only populated
     * when the state is DELETED and will be set a time after expiration of the
     * proposal, i.e. >= expire_time or (create_time + ttl).
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp purge_time = 16 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $purge_time = null;
    protected $approval_parameters;
    protected $expiration;
    protected $operation;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $name
     *           Identifier. The resource name for this
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance] in
     *           the format `projects/&#42;&#47;locations/&#42;&#47;singleTenantHsmInstances/&#42;&#47;proposals/&#42;`.
     *     @type \Google\Protobuf\Timestamp $create_time
     *           Output only. The time at which the
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     *           was created.
     *     @type int $state
     *           Output only. The state of the
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *     @type string $failure_reason
     *           Output only. The root cause of the most recent failure. Only present if
     *           [state][google.cloud.kms.v1.SingleTenantHsmInstanceProposal.state] is
     *           [FAILED][SingleTenantHsmInstanceProposal.FAILED].
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\QuorumParameters $quorum_parameters
     *           Output only. The quorum approval parameters for the
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RequiredActionQuorumParameters $required_action_quorum_parameters
     *           Output only. Parameters for an approval of a
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     *           that has both required challenges and a quorum.
     *     @type \Google\Protobuf\Timestamp $expire_time
     *           The time at which the
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     *           will expire if not approved and executed.
     *     @type \Google\Protobuf\Duration $ttl
     *           Input only. The TTL for the
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *           Proposals will expire after this duration.
     *     @type \Google\Protobuf\Timestamp $delete_time
     *           Output only. The time at which the
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     *           was deleted.
     *     @type \Google\Protobuf\Timestamp $purge_time
     *           Output only. The time at which the soft-deleted
     *           [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     *           will be permanently purged. This field is only populated
     *           when the state is DELETED and will be set a time after expiration of the
     *           proposal, i.e. >= expire_time or (create_time + ttl).
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RegisterTwoFactorAuthKeys $register_two_factor_auth_keys
     *           Register 2FA keys for the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     *           This operation requires all N Challenges to be signed by 2FA keys. The
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           must be in the
     *           [PENDING_TWO_FACTOR_AUTH_REGISTRATION][google.cloud.kms.v1.SingleTenantHsmInstance.State.PENDING_TWO_FACTOR_AUTH_REGISTRATION]
     *           state to perform this operation.
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DisableSingleTenantHsmInstance $disable_single_tenant_hsm_instance
     *           Disable the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     *           The
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           must be in the
     *           [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     *           to perform this operation.
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\EnableSingleTenantHsmInstance $enable_single_tenant_hsm_instance
     *           Enable the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     *           The
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           must be in the
     *           [DISABLED][google.cloud.kms.v1.SingleTenantHsmInstance.State.DISABLED]
     *           state to perform this operation.
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DeleteSingleTenantHsmInstance $delete_single_tenant_hsm_instance
     *           Delete the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     *           Deleting a
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           will make all [CryptoKeys][google.cloud.kms.v1.CryptoKey] attached to the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           unusable. The
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           must be in the
     *           [DISABLED][google.cloud.kms.v1.SingleTenantHsmInstance.State.DISABLED] or
     *           [PENDING_TWO_FACTOR_AUTH_REGISTRATION][google.cloud.kms.v1.SingleTenantHsmInstance.State.PENDING_TWO_FACTOR_AUTH_REGISTRATION]
     *           state to perform this operation.
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\AddQuorumMember $add_quorum_member
     *           Add a quorum member to the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     *           This will increase the
     *           [total_approver_count][google.cloud.kms.v1.SingleTenantHsmInstance.QuorumAuth.total_approver_count]
     *           by 1. The
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           must be in the
     *           [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     *           to perform this operation.
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RemoveQuorumMember $remove_quorum_member
     *           Remove a quorum member from the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     *           This will reduce
     *           [total_approver_count][google.cloud.kms.v1.SingleTenantHsmInstance.QuorumAuth.total_approver_count]
     *           by 1. The
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           must be in the
     *           [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     *           to perform this operation.
     *     @type \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RefreshSingleTenantHsmInstance $refresh_single_tenant_hsm_instance
     *           Refreshes the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     *           This operation must be performed periodically to keep the
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           active. This operation must be performed before
     *           [unrefreshed_duration_until_disable][google.cloud.kms.v1.SingleTenantHsmInstance.unrefreshed_duration_until_disable]
     *           has passed. The
     *           [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     *           must be in the
     *           [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     *           to perform this operation.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Cloud\Kms\V1\HsmManagement::initOnce();
        parent::__construct($data);
    }

    /**
     * Identifier. The resource name for this
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance] in
     * the format `projects/&#42;&#47;locations/&#42;&#47;singleTenantHsmInstances/&#42;&#47;proposals/&#42;`.
     *
     * Generated from protobuf field <code>string name = 1 [(.google.api.field_behavior) = IDENTIFIER];</code>
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Identifier. The resource name for this
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance] in
     * the format `projects/&#42;&#47;locations/&#42;&#47;singleTenantHsmInstances/&#42;&#47;proposals/&#42;`.
     *
     * Generated from protobuf field <code>string name = 1 [(.google.api.field_behavior) = IDENTIFIER];</code>
     * @param string $var
     * @return $this
     */
    public function setName($var)
    {
        GPBUtil::checkString($var, True);
        $this->name = $var;

        return $this;
    }

    /**
     * Output only. The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * was created.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp create_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return \Google\Protobuf\Timestamp|null
     */
    public function getCreateTime()
    {
        return $this->create_time;
    }

    public function hasCreateTime()
    {
        return isset($this->create_time);
    }

    public function clearCreateTime()
    {
        unset($this->create_time);
    }

    /**
     * Output only. The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * was created.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp create_time = 2 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setCreateTime($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->create_time = $var;

        return $this;
    }

    /**
     * Output only. The state of the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.State state = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return int
     */
    public function getState()
    {
        return $this->state;
    }

    /**
     * Output only. The state of the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.State state = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param int $var
     * @return $this
     */
    public function setState($var)
    {
        GPBUtil::checkEnum($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\State::class);
        $this->state = $var;

        return $this;
    }

    /**
     * Output only. The root cause of the most recent failure. Only present if
     * [state][google.cloud.kms.v1.SingleTenantHsmInstanceProposal.state] is
     * [FAILED][SingleTenantHsmInstanceProposal.FAILED].
     *
     * Generated from protobuf field <code>string failure_reason = 4 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return string
     */
    public function getFailureReason()
    {
        return $this->failure_reason;
    }

    /**
     * Output only. The root cause of the most recent failure. Only present if
     * [state][google.cloud.kms.v1.SingleTenantHsmInstanceProposal.state] is
     * [FAILED][SingleTenantHsmInstanceProposal.FAILED].
     *
     * Generated from protobuf field <code>string failure_reason = 4 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param string $var
     * @return $this
     */
    public function setFailureReason($var)
    {
        GPBUtil::checkString($var, True);
        $this->failure_reason = $var;

        return $this;
    }

    /**
     * Output only. The quorum approval parameters for the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.QuorumParameters quorum_parameters = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\QuorumParameters|null
     */
    public function getQuorumParameters()
    {
        return $this->readOneof(5);
    }

    public function hasQuorumParameters()
    {
        return $this->hasOneof(5);
    }

    /**
     * Output only. The quorum approval parameters for the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.QuorumParameters quorum_parameters = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\QuorumParameters $var
     * @return $this
     */
    public function setQuorumParameters($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\QuorumParameters::class);
        $this->writeOneof(5, $var);

        return $this;
    }

    /**
     * Output only. Parameters for an approval of a
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * that has both required challenges and a quorum.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RequiredActionQuorumParameters required_action_quorum_parameters = 14 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RequiredActionQuorumParameters|null
     */
    public function getRequiredActionQuorumParameters()
    {
        return $this->readOneof(14);
    }

    public function hasRequiredActionQuorumParameters()
    {
        return $this->hasOneof(14);
    }

    /**
     * Output only. Parameters for an approval of a
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * that has both required challenges and a quorum.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RequiredActionQuorumParameters required_action_quorum_parameters = 14 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RequiredActionQuorumParameters $var
     * @return $this
     */
    public function setRequiredActionQuorumParameters($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RequiredActionQuorumParameters::class);
        $this->writeOneof(14, $var);

        return $this;
    }

    /**
     * The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * will expire if not approved and executed.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp expire_time = 6;</code>
     * @return \Google\Protobuf\Timestamp|null
     */
    public function getExpireTime()
    {
        return $this->readOneof(6);
    }

    public function hasExpireTime()
    {
        return $this->hasOneof(6);
    }

    /**
     * The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * will expire if not approved and executed.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp expire_time = 6;</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setExpireTime($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->writeOneof(6, $var);

        return $this;
    }

    /**
     * Input only. The TTL for the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     * Proposals will expire after this duration.
     *
     * Generated from protobuf field <code>.google.protobuf.Duration ttl = 7 [(.google.api.field_behavior) = INPUT_ONLY];</code>
     * @return \Google\Protobuf\Duration|null
     */
    public function getTtl()
    {
        return $this->readOneof(7);
    }

    public function hasTtl()
    {
        return $this->hasOneof(7);
    }

    /**
     * Input only. The TTL for the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
     * Proposals will expire after this duration.
     *
     * Generated from protobuf field <code>.google.protobuf.Duration ttl = 7 [(.google.api.field_behavior) = INPUT_ONLY];</code>
     * @param \Google\Protobuf\Duration $var
     * @return $this
     */
    public function setTtl($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Duration::class);
        $this->writeOneof(7, $var);

        return $this;
    }

    /**
     * Output only. The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * was deleted.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp delete_time = 15 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return \Google\Protobuf\Timestamp|null
     */
    public function getDeleteTime()
    {
        return $this->delete_time;
    }

    public function hasDeleteTime()
    {
        return isset($this->delete_time);
    }

    public function clearDeleteTime()
    {
        unset($this->delete_time);
    }

    /**
     * Output only. The time at which the
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * was deleted.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp delete_time = 15 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setDeleteTime($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->delete_time = $var;

        return $this;
    }

    /**
     * Output only. The time at which the soft-deleted
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * will be permanently purged. This field is only populated
     * when the state is DELETED and will be set a time after expiration of the
     * proposal, i.e. >= expire_time or (create_time + ttl).
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp purge_time = 16 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return \Google\Protobuf\Timestamp|null
     */
    public function getPurgeTime()
    {
        return $this->purge_time;
    }

    public function hasPurgeTime()
    {
        return isset($this->purge_time);
    }

    public function clearPurgeTime()
    {
        unset($this->purge_time);
    }

    /**
     * Output only. The time at which the soft-deleted
     * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
     * will be permanently purged. This field is only populated
     * when the state is DELETED and will be set a time after expiration of the
     * proposal, i.e. >= expire_time or (create_time + ttl).
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp purge_time = 16 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setPurgeTime($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->purge_time = $var;

        return $this;
    }

    /**
     * Register 2FA keys for the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This operation requires all N Challenges to be signed by 2FA keys. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [PENDING_TWO_FACTOR_AUTH_REGISTRATION][google.cloud.kms.v1.SingleTenantHsmInstance.State.PENDING_TWO_FACTOR_AUTH_REGISTRATION]
     * state to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RegisterTwoFactorAuthKeys register_two_factor_auth_keys = 8;</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RegisterTwoFactorAuthKeys|null
     */
    public function getRegisterTwoFactorAuthKeys()
    {
        return $this->readOneof(8);
    }

    public function hasRegisterTwoFactorAuthKeys()
    {
        return $this->hasOneof(8);
    }

    /**
     * Register 2FA keys for the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This operation requires all N Challenges to be signed by 2FA keys. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [PENDING_TWO_FACTOR_AUTH_REGISTRATION][google.cloud.kms.v1.SingleTenantHsmInstance.State.PENDING_TWO_FACTOR_AUTH_REGISTRATION]
     * state to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RegisterTwoFactorAuthKeys register_two_factor_auth_keys = 8;</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RegisterTwoFactorAuthKeys $var
     * @return $this
     */
    public function setRegisterTwoFactorAuthKeys($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RegisterTwoFactorAuthKeys::class);
        $this->writeOneof(8, $var);

        return $this;
    }

    /**
     * Disable the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.DisableSingleTenantHsmInstance disable_single_tenant_hsm_instance = 9;</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DisableSingleTenantHsmInstance|null
     */
    public function getDisableSingleTenantHsmInstance()
    {
        return $this->readOneof(9);
    }

    public function hasDisableSingleTenantHsmInstance()
    {
        return $this->hasOneof(9);
    }

    /**
     * Disable the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.DisableSingleTenantHsmInstance disable_single_tenant_hsm_instance = 9;</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DisableSingleTenantHsmInstance $var
     * @return $this
     */
    public function setDisableSingleTenantHsmInstance($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DisableSingleTenantHsmInstance::class);
        $this->writeOneof(9, $var);

        return $this;
    }

    /**
     * Enable the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [DISABLED][google.cloud.kms.v1.SingleTenantHsmInstance.State.DISABLED]
     * state to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.EnableSingleTenantHsmInstance enable_single_tenant_hsm_instance = 10;</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\EnableSingleTenantHsmInstance|null
     */
    public function getEnableSingleTenantHsmInstance()
    {
        return $this->readOneof(10);
    }

    public function hasEnableSingleTenantHsmInstance()
    {
        return $this->hasOneof(10);
    }

    /**
     * Enable the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [DISABLED][google.cloud.kms.v1.SingleTenantHsmInstance.State.DISABLED]
     * state to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.EnableSingleTenantHsmInstance enable_single_tenant_hsm_instance = 10;</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\EnableSingleTenantHsmInstance $var
     * @return $this
     */
    public function setEnableSingleTenantHsmInstance($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\EnableSingleTenantHsmInstance::class);
        $this->writeOneof(10, $var);

        return $this;
    }

    /**
     * Delete the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * Deleting a
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * will make all [CryptoKeys][google.cloud.kms.v1.CryptoKey] attached to the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * unusable. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [DISABLED][google.cloud.kms.v1.SingleTenantHsmInstance.State.DISABLED] or
     * [PENDING_TWO_FACTOR_AUTH_REGISTRATION][google.cloud.kms.v1.SingleTenantHsmInstance.State.PENDING_TWO_FACTOR_AUTH_REGISTRATION]
     * state to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.DeleteSingleTenantHsmInstance delete_single_tenant_hsm_instance = 11;</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DeleteSingleTenantHsmInstance|null
     */
    public function getDeleteSingleTenantHsmInstance()
    {
        return $this->readOneof(11);
    }

    public function hasDeleteSingleTenantHsmInstance()
    {
        return $this->hasOneof(11);
    }

    /**
     * Delete the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * Deleting a
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * will make all [CryptoKeys][google.cloud.kms.v1.CryptoKey] attached to the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * unusable. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [DISABLED][google.cloud.kms.v1.SingleTenantHsmInstance.State.DISABLED] or
     * [PENDING_TWO_FACTOR_AUTH_REGISTRATION][google.cloud.kms.v1.SingleTenantHsmInstance.State.PENDING_TWO_FACTOR_AUTH_REGISTRATION]
     * state to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.DeleteSingleTenantHsmInstance delete_single_tenant_hsm_instance = 11;</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DeleteSingleTenantHsmInstance $var
     * @return $this
     */
    public function setDeleteSingleTenantHsmInstance($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\DeleteSingleTenantHsmInstance::class);
        $this->writeOneof(11, $var);

        return $this;
    }

    /**
     * Add a quorum member to the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This will increase the
     * [total_approver_count][google.cloud.kms.v1.SingleTenantHsmInstance.QuorumAuth.total_approver_count]
     * by 1. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.AddQuorumMember add_quorum_member = 12;</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\AddQuorumMember|null
     */
    public function getAddQuorumMember()
    {
        return $this->readOneof(12);
    }

    public function hasAddQuorumMember()
    {
        return $this->hasOneof(12);
    }

    /**
     * Add a quorum member to the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This will increase the
     * [total_approver_count][google.cloud.kms.v1.SingleTenantHsmInstance.QuorumAuth.total_approver_count]
     * by 1. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.AddQuorumMember add_quorum_member = 12;</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\AddQuorumMember $var
     * @return $this
     */
    public function setAddQuorumMember($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\AddQuorumMember::class);
        $this->writeOneof(12, $var);

        return $this;
    }

    /**
     * Remove a quorum member from the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This will reduce
     * [total_approver_count][google.cloud.kms.v1.SingleTenantHsmInstance.QuorumAuth.total_approver_count]
     * by 1. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RemoveQuorumMember remove_quorum_member = 13;</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RemoveQuorumMember|null
     */
    public function getRemoveQuorumMember()
    {
        return $this->readOneof(13);
    }

    public function hasRemoveQuorumMember()
    {
        return $this->hasOneof(13);
    }

    /**
     * Remove a quorum member from the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This will reduce
     * [total_approver_count][google.cloud.kms.v1.SingleTenantHsmInstance.QuorumAuth.total_approver_count]
     * by 1. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RemoveQuorumMember remove_quorum_member = 13;</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RemoveQuorumMember $var
     * @return $this
     */
    public function setRemoveQuorumMember($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RemoveQuorumMember::class);
        $this->writeOneof(13, $var);

        return $this;
    }

    /**
     * Refreshes the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This operation must be performed periodically to keep the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * active. This operation must be performed before
     * [unrefreshed_duration_until_disable][google.cloud.kms.v1.SingleTenantHsmInstance.unrefreshed_duration_until_disable]
     * has passed. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RefreshSingleTenantHsmInstance refresh_single_tenant_hsm_instance = 17;</code>
     * @return \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RefreshSingleTenantHsmInstance|null
     */
    public function getRefreshSingleTenantHsmInstance()
    {
        return $this->readOneof(17);
    }

    public function hasRefreshSingleTenantHsmInstance()
    {
        return $this->hasOneof(17);
    }

    /**
     * Refreshes the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
     * This operation must be performed periodically to keep the
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * active. This operation must be performed before
     * [unrefreshed_duration_until_disable][google.cloud.kms.v1.SingleTenantHsmInstance.unrefreshed_duration_until_disable]
     * has passed. The
     * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
     * must be in the
     * [ACTIVE][google.cloud.kms.v1.SingleTenantHsmInstance.State.ACTIVE] state
     * to perform this operation.
     *
     * Generated from protobuf field <code>.google.cloud.kms.v1.SingleTenantHsmInstanceProposal.RefreshSingleTenantHsmInstance refresh_single_tenant_hsm_instance = 17;</code>
     * @param \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RefreshSingleTenantHsmInstance $var
     * @return $this
     */
    public function setRefreshSingleTenantHsmInstance($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Kms\V1\SingleTenantHsmInstanceProposal\RefreshSingleTenantHsmInstance::class);
        $this->writeOneof(17, $var);

        return $this;
    }

    /**
     * @return string
     */
    public function getApprovalParameters()
    {
        return $this->whichOneof("approval_parameters");
    }

    /**
     * @return string
     */
    public function getExpiration()
    {
        return $this->whichOneof("expiration");
    }

    /**
     * @return string
     */
    public function getOperation()
    {
        return $this->whichOneof("operation");
    }

}

