# coding: utf-8

"""
    ORY Hydra

    Welcome to the ORY Hydra HTTP API documentation. You will find documentation for all HTTP APIs here.  # noqa: E501

    The version of the OpenAPI document: latest
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from ory_hydra_client.configuration import Configuration


class Certificate(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'authority_key_id': 'list[int]',
        'basic_constraints_valid': 'bool',
        'crl_distribution_points': 'list[str]',
        'dns_names': 'list[str]',
        'email_addresses': 'list[str]',
        'excluded_dns_domains': 'list[str]',
        'excluded_email_addresses': 'list[str]',
        'excluded_ip_ranges': 'list[IPNet]',
        'excluded_uri_domains': 'list[str]',
        'ext_key_usage': 'list[int]',
        'extensions': 'list[Extension]',
        'extra_extensions': 'list[Extension]',
        'ip_addresses': 'list[list]',
        'is_ca': 'bool',
        'issuer': 'Name',
        'issuing_certificate_url': 'list[str]',
        'key_usage': 'int',
        'max_path_len': 'int',
        'max_path_len_zero': 'bool',
        'not_before': 'datetime',
        'ocsp_server': 'list[str]',
        'permitted_dns_domains': 'list[str]',
        'permitted_dns_domains_critical': 'bool',
        'permitted_email_addresses': 'list[str]',
        'permitted_ip_ranges': 'list[IPNet]',
        'permitted_uri_domains': 'list[str]',
        'policy_identifiers': 'list[list]',
        'public_key': 'object',
        'public_key_algorithm': 'int',
        'raw': 'list[int]',
        'raw_issuer': 'list[int]',
        'raw_subject': 'list[int]',
        'raw_subject_public_key_info': 'list[int]',
        'raw_tbs_certificate': 'list[int]',
        'serial_number': 'object',
        'signature': 'list[int]',
        'signature_algorithm': 'int',
        'subject': 'Name',
        'subject_key_id': 'list[int]',
        'ur_is': 'list[URL]',
        'unhandled_critical_extensions': 'list[list]',
        'unknown_ext_key_usage': 'list[list]',
        'version': 'int'
    }

    attribute_map = {
        'authority_key_id': 'AuthorityKeyId',
        'basic_constraints_valid': 'BasicConstraintsValid',
        'crl_distribution_points': 'CRLDistributionPoints',
        'dns_names': 'DNSNames',
        'email_addresses': 'EmailAddresses',
        'excluded_dns_domains': 'ExcludedDNSDomains',
        'excluded_email_addresses': 'ExcludedEmailAddresses',
        'excluded_ip_ranges': 'ExcludedIPRanges',
        'excluded_uri_domains': 'ExcludedURIDomains',
        'ext_key_usage': 'ExtKeyUsage',
        'extensions': 'Extensions',
        'extra_extensions': 'ExtraExtensions',
        'ip_addresses': 'IPAddresses',
        'is_ca': 'IsCA',
        'issuer': 'Issuer',
        'issuing_certificate_url': 'IssuingCertificateURL',
        'key_usage': 'KeyUsage',
        'max_path_len': 'MaxPathLen',
        'max_path_len_zero': 'MaxPathLenZero',
        'not_before': 'NotBefore',
        'ocsp_server': 'OCSPServer',
        'permitted_dns_domains': 'PermittedDNSDomains',
        'permitted_dns_domains_critical': 'PermittedDNSDomainsCritical',
        'permitted_email_addresses': 'PermittedEmailAddresses',
        'permitted_ip_ranges': 'PermittedIPRanges',
        'permitted_uri_domains': 'PermittedURIDomains',
        'policy_identifiers': 'PolicyIdentifiers',
        'public_key': 'PublicKey',
        'public_key_algorithm': 'PublicKeyAlgorithm',
        'raw': 'Raw',
        'raw_issuer': 'RawIssuer',
        'raw_subject': 'RawSubject',
        'raw_subject_public_key_info': 'RawSubjectPublicKeyInfo',
        'raw_tbs_certificate': 'RawTBSCertificate',
        'serial_number': 'SerialNumber',
        'signature': 'Signature',
        'signature_algorithm': 'SignatureAlgorithm',
        'subject': 'Subject',
        'subject_key_id': 'SubjectKeyId',
        'ur_is': 'URIs',
        'unhandled_critical_extensions': 'UnhandledCriticalExtensions',
        'unknown_ext_key_usage': 'UnknownExtKeyUsage',
        'version': 'Version'
    }

    def __init__(self, authority_key_id=None, basic_constraints_valid=None, crl_distribution_points=None, dns_names=None, email_addresses=None, excluded_dns_domains=None, excluded_email_addresses=None, excluded_ip_ranges=None, excluded_uri_domains=None, ext_key_usage=None, extensions=None, extra_extensions=None, ip_addresses=None, is_ca=None, issuer=None, issuing_certificate_url=None, key_usage=None, max_path_len=None, max_path_len_zero=None, not_before=None, ocsp_server=None, permitted_dns_domains=None, permitted_dns_domains_critical=None, permitted_email_addresses=None, permitted_ip_ranges=None, permitted_uri_domains=None, policy_identifiers=None, public_key=None, public_key_algorithm=None, raw=None, raw_issuer=None, raw_subject=None, raw_subject_public_key_info=None, raw_tbs_certificate=None, serial_number=None, signature=None, signature_algorithm=None, subject=None, subject_key_id=None, ur_is=None, unhandled_critical_extensions=None, unknown_ext_key_usage=None, version=None, local_vars_configuration=None):  # noqa: E501
        """Certificate - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._authority_key_id = None
        self._basic_constraints_valid = None
        self._crl_distribution_points = None
        self._dns_names = None
        self._email_addresses = None
        self._excluded_dns_domains = None
        self._excluded_email_addresses = None
        self._excluded_ip_ranges = None
        self._excluded_uri_domains = None
        self._ext_key_usage = None
        self._extensions = None
        self._extra_extensions = None
        self._ip_addresses = None
        self._is_ca = None
        self._issuer = None
        self._issuing_certificate_url = None
        self._key_usage = None
        self._max_path_len = None
        self._max_path_len_zero = None
        self._not_before = None
        self._ocsp_server = None
        self._permitted_dns_domains = None
        self._permitted_dns_domains_critical = None
        self._permitted_email_addresses = None
        self._permitted_ip_ranges = None
        self._permitted_uri_domains = None
        self._policy_identifiers = None
        self._public_key = None
        self._public_key_algorithm = None
        self._raw = None
        self._raw_issuer = None
        self._raw_subject = None
        self._raw_subject_public_key_info = None
        self._raw_tbs_certificate = None
        self._serial_number = None
        self._signature = None
        self._signature_algorithm = None
        self._subject = None
        self._subject_key_id = None
        self._ur_is = None
        self._unhandled_critical_extensions = None
        self._unknown_ext_key_usage = None
        self._version = None
        self.discriminator = None

        if authority_key_id is not None:
            self.authority_key_id = authority_key_id
        if basic_constraints_valid is not None:
            self.basic_constraints_valid = basic_constraints_valid
        if crl_distribution_points is not None:
            self.crl_distribution_points = crl_distribution_points
        if dns_names is not None:
            self.dns_names = dns_names
        if email_addresses is not None:
            self.email_addresses = email_addresses
        if excluded_dns_domains is not None:
            self.excluded_dns_domains = excluded_dns_domains
        if excluded_email_addresses is not None:
            self.excluded_email_addresses = excluded_email_addresses
        if excluded_ip_ranges is not None:
            self.excluded_ip_ranges = excluded_ip_ranges
        if excluded_uri_domains is not None:
            self.excluded_uri_domains = excluded_uri_domains
        if ext_key_usage is not None:
            self.ext_key_usage = ext_key_usage
        if extensions is not None:
            self.extensions = extensions
        if extra_extensions is not None:
            self.extra_extensions = extra_extensions
        if ip_addresses is not None:
            self.ip_addresses = ip_addresses
        if is_ca is not None:
            self.is_ca = is_ca
        if issuer is not None:
            self.issuer = issuer
        if issuing_certificate_url is not None:
            self.issuing_certificate_url = issuing_certificate_url
        if key_usage is not None:
            self.key_usage = key_usage
        if max_path_len is not None:
            self.max_path_len = max_path_len
        if max_path_len_zero is not None:
            self.max_path_len_zero = max_path_len_zero
        if not_before is not None:
            self.not_before = not_before
        if ocsp_server is not None:
            self.ocsp_server = ocsp_server
        if permitted_dns_domains is not None:
            self.permitted_dns_domains = permitted_dns_domains
        if permitted_dns_domains_critical is not None:
            self.permitted_dns_domains_critical = permitted_dns_domains_critical
        if permitted_email_addresses is not None:
            self.permitted_email_addresses = permitted_email_addresses
        if permitted_ip_ranges is not None:
            self.permitted_ip_ranges = permitted_ip_ranges
        if permitted_uri_domains is not None:
            self.permitted_uri_domains = permitted_uri_domains
        if policy_identifiers is not None:
            self.policy_identifiers = policy_identifiers
        if public_key is not None:
            self.public_key = public_key
        if public_key_algorithm is not None:
            self.public_key_algorithm = public_key_algorithm
        if raw is not None:
            self.raw = raw
        if raw_issuer is not None:
            self.raw_issuer = raw_issuer
        if raw_subject is not None:
            self.raw_subject = raw_subject
        if raw_subject_public_key_info is not None:
            self.raw_subject_public_key_info = raw_subject_public_key_info
        if raw_tbs_certificate is not None:
            self.raw_tbs_certificate = raw_tbs_certificate
        if serial_number is not None:
            self.serial_number = serial_number
        if signature is not None:
            self.signature = signature
        if signature_algorithm is not None:
            self.signature_algorithm = signature_algorithm
        if subject is not None:
            self.subject = subject
        if subject_key_id is not None:
            self.subject_key_id = subject_key_id
        if ur_is is not None:
            self.ur_is = ur_is
        if unhandled_critical_extensions is not None:
            self.unhandled_critical_extensions = unhandled_critical_extensions
        if unknown_ext_key_usage is not None:
            self.unknown_ext_key_usage = unknown_ext_key_usage
        if version is not None:
            self.version = version

    @property
    def authority_key_id(self):
        """Gets the authority_key_id of this Certificate.  # noqa: E501

        authority key Id  # noqa: E501

        :return: The authority_key_id of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._authority_key_id

    @authority_key_id.setter
    def authority_key_id(self, authority_key_id):
        """Sets the authority_key_id of this Certificate.

        authority key Id  # noqa: E501

        :param authority_key_id: The authority_key_id of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._authority_key_id = authority_key_id

    @property
    def basic_constraints_valid(self):
        """Gets the basic_constraints_valid of this Certificate.  # noqa: E501

        BasicConstraintsValid indicates whether IsCA, MaxPathLen, and MaxPathLenZero are valid.  # noqa: E501

        :return: The basic_constraints_valid of this Certificate.  # noqa: E501
        :rtype: bool
        """
        return self._basic_constraints_valid

    @basic_constraints_valid.setter
    def basic_constraints_valid(self, basic_constraints_valid):
        """Sets the basic_constraints_valid of this Certificate.

        BasicConstraintsValid indicates whether IsCA, MaxPathLen, and MaxPathLenZero are valid.  # noqa: E501

        :param basic_constraints_valid: The basic_constraints_valid of this Certificate.  # noqa: E501
        :type: bool
        """

        self._basic_constraints_valid = basic_constraints_valid

    @property
    def crl_distribution_points(self):
        """Gets the crl_distribution_points of this Certificate.  # noqa: E501

        CRL Distribution Points  # noqa: E501

        :return: The crl_distribution_points of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._crl_distribution_points

    @crl_distribution_points.setter
    def crl_distribution_points(self, crl_distribution_points):
        """Sets the crl_distribution_points of this Certificate.

        CRL Distribution Points  # noqa: E501

        :param crl_distribution_points: The crl_distribution_points of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._crl_distribution_points = crl_distribution_points

    @property
    def dns_names(self):
        """Gets the dns_names of this Certificate.  # noqa: E501

        Subject Alternate Name values. (Note that these values may not be valid if invalid values were contained within a parsed certificate. For example, an element of DNSNames may not be a valid DNS domain name.)  # noqa: E501

        :return: The dns_names of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._dns_names

    @dns_names.setter
    def dns_names(self, dns_names):
        """Sets the dns_names of this Certificate.

        Subject Alternate Name values. (Note that these values may not be valid if invalid values were contained within a parsed certificate. For example, an element of DNSNames may not be a valid DNS domain name.)  # noqa: E501

        :param dns_names: The dns_names of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._dns_names = dns_names

    @property
    def email_addresses(self):
        """Gets the email_addresses of this Certificate.  # noqa: E501

        email addresses  # noqa: E501

        :return: The email_addresses of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._email_addresses

    @email_addresses.setter
    def email_addresses(self, email_addresses):
        """Sets the email_addresses of this Certificate.

        email addresses  # noqa: E501

        :param email_addresses: The email_addresses of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._email_addresses = email_addresses

    @property
    def excluded_dns_domains(self):
        """Gets the excluded_dns_domains of this Certificate.  # noqa: E501

        excluded DNS domains  # noqa: E501

        :return: The excluded_dns_domains of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._excluded_dns_domains

    @excluded_dns_domains.setter
    def excluded_dns_domains(self, excluded_dns_domains):
        """Sets the excluded_dns_domains of this Certificate.

        excluded DNS domains  # noqa: E501

        :param excluded_dns_domains: The excluded_dns_domains of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._excluded_dns_domains = excluded_dns_domains

    @property
    def excluded_email_addresses(self):
        """Gets the excluded_email_addresses of this Certificate.  # noqa: E501

        excluded email addresses  # noqa: E501

        :return: The excluded_email_addresses of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._excluded_email_addresses

    @excluded_email_addresses.setter
    def excluded_email_addresses(self, excluded_email_addresses):
        """Sets the excluded_email_addresses of this Certificate.

        excluded email addresses  # noqa: E501

        :param excluded_email_addresses: The excluded_email_addresses of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._excluded_email_addresses = excluded_email_addresses

    @property
    def excluded_ip_ranges(self):
        """Gets the excluded_ip_ranges of this Certificate.  # noqa: E501

        excluded IP ranges  # noqa: E501

        :return: The excluded_ip_ranges of this Certificate.  # noqa: E501
        :rtype: list[IPNet]
        """
        return self._excluded_ip_ranges

    @excluded_ip_ranges.setter
    def excluded_ip_ranges(self, excluded_ip_ranges):
        """Sets the excluded_ip_ranges of this Certificate.

        excluded IP ranges  # noqa: E501

        :param excluded_ip_ranges: The excluded_ip_ranges of this Certificate.  # noqa: E501
        :type: list[IPNet]
        """

        self._excluded_ip_ranges = excluded_ip_ranges

    @property
    def excluded_uri_domains(self):
        """Gets the excluded_uri_domains of this Certificate.  # noqa: E501

        excluded URI domains  # noqa: E501

        :return: The excluded_uri_domains of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._excluded_uri_domains

    @excluded_uri_domains.setter
    def excluded_uri_domains(self, excluded_uri_domains):
        """Sets the excluded_uri_domains of this Certificate.

        excluded URI domains  # noqa: E501

        :param excluded_uri_domains: The excluded_uri_domains of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._excluded_uri_domains = excluded_uri_domains

    @property
    def ext_key_usage(self):
        """Gets the ext_key_usage of this Certificate.  # noqa: E501

        ext key usage  # noqa: E501

        :return: The ext_key_usage of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._ext_key_usage

    @ext_key_usage.setter
    def ext_key_usage(self, ext_key_usage):
        """Sets the ext_key_usage of this Certificate.

        ext key usage  # noqa: E501

        :param ext_key_usage: The ext_key_usage of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._ext_key_usage = ext_key_usage

    @property
    def extensions(self):
        """Gets the extensions of this Certificate.  # noqa: E501

        Extensions contains raw X.509 extensions. When parsing certificates, this can be used to extract non-critical extensions that are not parsed by this package. When marshaling certificates, the Extensions field is ignored, see ExtraExtensions.  # noqa: E501

        :return: The extensions of this Certificate.  # noqa: E501
        :rtype: list[Extension]
        """
        return self._extensions

    @extensions.setter
    def extensions(self, extensions):
        """Sets the extensions of this Certificate.

        Extensions contains raw X.509 extensions. When parsing certificates, this can be used to extract non-critical extensions that are not parsed by this package. When marshaling certificates, the Extensions field is ignored, see ExtraExtensions.  # noqa: E501

        :param extensions: The extensions of this Certificate.  # noqa: E501
        :type: list[Extension]
        """

        self._extensions = extensions

    @property
    def extra_extensions(self):
        """Gets the extra_extensions of this Certificate.  # noqa: E501

        ExtraExtensions contains extensions to be copied, raw, into any marshaled certificates. Values override any extensions that would otherwise be produced based on the other fields. The ExtraExtensions field is not populated when parsing certificates, see Extensions.  # noqa: E501

        :return: The extra_extensions of this Certificate.  # noqa: E501
        :rtype: list[Extension]
        """
        return self._extra_extensions

    @extra_extensions.setter
    def extra_extensions(self, extra_extensions):
        """Sets the extra_extensions of this Certificate.

        ExtraExtensions contains extensions to be copied, raw, into any marshaled certificates. Values override any extensions that would otherwise be produced based on the other fields. The ExtraExtensions field is not populated when parsing certificates, see Extensions.  # noqa: E501

        :param extra_extensions: The extra_extensions of this Certificate.  # noqa: E501
        :type: list[Extension]
        """

        self._extra_extensions = extra_extensions

    @property
    def ip_addresses(self):
        """Gets the ip_addresses of this Certificate.  # noqa: E501

        IP addresses  # noqa: E501

        :return: The ip_addresses of this Certificate.  # noqa: E501
        :rtype: list[list]
        """
        return self._ip_addresses

    @ip_addresses.setter
    def ip_addresses(self, ip_addresses):
        """Sets the ip_addresses of this Certificate.

        IP addresses  # noqa: E501

        :param ip_addresses: The ip_addresses of this Certificate.  # noqa: E501
        :type: list[list]
        """

        self._ip_addresses = ip_addresses

    @property
    def is_ca(self):
        """Gets the is_ca of this Certificate.  # noqa: E501

        is c a  # noqa: E501

        :return: The is_ca of this Certificate.  # noqa: E501
        :rtype: bool
        """
        return self._is_ca

    @is_ca.setter
    def is_ca(self, is_ca):
        """Sets the is_ca of this Certificate.

        is c a  # noqa: E501

        :param is_ca: The is_ca of this Certificate.  # noqa: E501
        :type: bool
        """

        self._is_ca = is_ca

    @property
    def issuer(self):
        """Gets the issuer of this Certificate.  # noqa: E501


        :return: The issuer of this Certificate.  # noqa: E501
        :rtype: Name
        """
        return self._issuer

    @issuer.setter
    def issuer(self, issuer):
        """Sets the issuer of this Certificate.


        :param issuer: The issuer of this Certificate.  # noqa: E501
        :type: Name
        """

        self._issuer = issuer

    @property
    def issuing_certificate_url(self):
        """Gets the issuing_certificate_url of this Certificate.  # noqa: E501

        issuing certificate URL  # noqa: E501

        :return: The issuing_certificate_url of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._issuing_certificate_url

    @issuing_certificate_url.setter
    def issuing_certificate_url(self, issuing_certificate_url):
        """Sets the issuing_certificate_url of this Certificate.

        issuing certificate URL  # noqa: E501

        :param issuing_certificate_url: The issuing_certificate_url of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._issuing_certificate_url = issuing_certificate_url

    @property
    def key_usage(self):
        """Gets the key_usage of this Certificate.  # noqa: E501

        KeyUsage KeyUsage KeyUsage KeyUsage represents the set of actions that are valid for a given key. It's a bitmap of the KeyUsage* constants.  # noqa: E501

        :return: The key_usage of this Certificate.  # noqa: E501
        :rtype: int
        """
        return self._key_usage

    @key_usage.setter
    def key_usage(self, key_usage):
        """Sets the key_usage of this Certificate.

        KeyUsage KeyUsage KeyUsage KeyUsage represents the set of actions that are valid for a given key. It's a bitmap of the KeyUsage* constants.  # noqa: E501

        :param key_usage: The key_usage of this Certificate.  # noqa: E501
        :type: int
        """

        self._key_usage = key_usage

    @property
    def max_path_len(self):
        """Gets the max_path_len of this Certificate.  # noqa: E501

        MaxPathLen and MaxPathLenZero indicate the presence and value of the BasicConstraints' \"pathLenConstraint\".  When parsing a certificate, a positive non-zero MaxPathLen means that the field was specified, -1 means it was unset, and MaxPathLenZero being true mean that the field was explicitly set to zero. The case of MaxPathLen==0 with MaxPathLenZero==false should be treated equivalent to -1 (unset).  When generating a certificate, an unset pathLenConstraint can be requested with either MaxPathLen == -1 or using the zero value for both MaxPathLen and MaxPathLenZero.  # noqa: E501

        :return: The max_path_len of this Certificate.  # noqa: E501
        :rtype: int
        """
        return self._max_path_len

    @max_path_len.setter
    def max_path_len(self, max_path_len):
        """Sets the max_path_len of this Certificate.

        MaxPathLen and MaxPathLenZero indicate the presence and value of the BasicConstraints' \"pathLenConstraint\".  When parsing a certificate, a positive non-zero MaxPathLen means that the field was specified, -1 means it was unset, and MaxPathLenZero being true mean that the field was explicitly set to zero. The case of MaxPathLen==0 with MaxPathLenZero==false should be treated equivalent to -1 (unset).  When generating a certificate, an unset pathLenConstraint can be requested with either MaxPathLen == -1 or using the zero value for both MaxPathLen and MaxPathLenZero.  # noqa: E501

        :param max_path_len: The max_path_len of this Certificate.  # noqa: E501
        :type: int
        """

        self._max_path_len = max_path_len

    @property
    def max_path_len_zero(self):
        """Gets the max_path_len_zero of this Certificate.  # noqa: E501

        MaxPathLenZero indicates that BasicConstraintsValid==true and MaxPathLen==0 should be interpreted as an actual maximum path length of zero. Otherwise, that combination is interpreted as MaxPathLen not being set.  # noqa: E501

        :return: The max_path_len_zero of this Certificate.  # noqa: E501
        :rtype: bool
        """
        return self._max_path_len_zero

    @max_path_len_zero.setter
    def max_path_len_zero(self, max_path_len_zero):
        """Sets the max_path_len_zero of this Certificate.

        MaxPathLenZero indicates that BasicConstraintsValid==true and MaxPathLen==0 should be interpreted as an actual maximum path length of zero. Otherwise, that combination is interpreted as MaxPathLen not being set.  # noqa: E501

        :param max_path_len_zero: The max_path_len_zero of this Certificate.  # noqa: E501
        :type: bool
        """

        self._max_path_len_zero = max_path_len_zero

    @property
    def not_before(self):
        """Gets the not_before of this Certificate.  # noqa: E501

        not before Format: date-time Format: date-time Format: date-time  # noqa: E501

        :return: The not_before of this Certificate.  # noqa: E501
        :rtype: datetime
        """
        return self._not_before

    @not_before.setter
    def not_before(self, not_before):
        """Sets the not_before of this Certificate.

        not before Format: date-time Format: date-time Format: date-time  # noqa: E501

        :param not_before: The not_before of this Certificate.  # noqa: E501
        :type: datetime
        """

        self._not_before = not_before

    @property
    def ocsp_server(self):
        """Gets the ocsp_server of this Certificate.  # noqa: E501

        RFC 5280, 4.2.2.1 (Authority Information Access)  # noqa: E501

        :return: The ocsp_server of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._ocsp_server

    @ocsp_server.setter
    def ocsp_server(self, ocsp_server):
        """Sets the ocsp_server of this Certificate.

        RFC 5280, 4.2.2.1 (Authority Information Access)  # noqa: E501

        :param ocsp_server: The ocsp_server of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._ocsp_server = ocsp_server

    @property
    def permitted_dns_domains(self):
        """Gets the permitted_dns_domains of this Certificate.  # noqa: E501

        permitted DNS domains  # noqa: E501

        :return: The permitted_dns_domains of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._permitted_dns_domains

    @permitted_dns_domains.setter
    def permitted_dns_domains(self, permitted_dns_domains):
        """Sets the permitted_dns_domains of this Certificate.

        permitted DNS domains  # noqa: E501

        :param permitted_dns_domains: The permitted_dns_domains of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._permitted_dns_domains = permitted_dns_domains

    @property
    def permitted_dns_domains_critical(self):
        """Gets the permitted_dns_domains_critical of this Certificate.  # noqa: E501

        Name constraints  # noqa: E501

        :return: The permitted_dns_domains_critical of this Certificate.  # noqa: E501
        :rtype: bool
        """
        return self._permitted_dns_domains_critical

    @permitted_dns_domains_critical.setter
    def permitted_dns_domains_critical(self, permitted_dns_domains_critical):
        """Sets the permitted_dns_domains_critical of this Certificate.

        Name constraints  # noqa: E501

        :param permitted_dns_domains_critical: The permitted_dns_domains_critical of this Certificate.  # noqa: E501
        :type: bool
        """

        self._permitted_dns_domains_critical = permitted_dns_domains_critical

    @property
    def permitted_email_addresses(self):
        """Gets the permitted_email_addresses of this Certificate.  # noqa: E501

        permitted email addresses  # noqa: E501

        :return: The permitted_email_addresses of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._permitted_email_addresses

    @permitted_email_addresses.setter
    def permitted_email_addresses(self, permitted_email_addresses):
        """Sets the permitted_email_addresses of this Certificate.

        permitted email addresses  # noqa: E501

        :param permitted_email_addresses: The permitted_email_addresses of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._permitted_email_addresses = permitted_email_addresses

    @property
    def permitted_ip_ranges(self):
        """Gets the permitted_ip_ranges of this Certificate.  # noqa: E501

        permitted IP ranges  # noqa: E501

        :return: The permitted_ip_ranges of this Certificate.  # noqa: E501
        :rtype: list[IPNet]
        """
        return self._permitted_ip_ranges

    @permitted_ip_ranges.setter
    def permitted_ip_ranges(self, permitted_ip_ranges):
        """Sets the permitted_ip_ranges of this Certificate.

        permitted IP ranges  # noqa: E501

        :param permitted_ip_ranges: The permitted_ip_ranges of this Certificate.  # noqa: E501
        :type: list[IPNet]
        """

        self._permitted_ip_ranges = permitted_ip_ranges

    @property
    def permitted_uri_domains(self):
        """Gets the permitted_uri_domains of this Certificate.  # noqa: E501

        permitted URI domains  # noqa: E501

        :return: The permitted_uri_domains of this Certificate.  # noqa: E501
        :rtype: list[str]
        """
        return self._permitted_uri_domains

    @permitted_uri_domains.setter
    def permitted_uri_domains(self, permitted_uri_domains):
        """Sets the permitted_uri_domains of this Certificate.

        permitted URI domains  # noqa: E501

        :param permitted_uri_domains: The permitted_uri_domains of this Certificate.  # noqa: E501
        :type: list[str]
        """

        self._permitted_uri_domains = permitted_uri_domains

    @property
    def policy_identifiers(self):
        """Gets the policy_identifiers of this Certificate.  # noqa: E501

        policy identifiers  # noqa: E501

        :return: The policy_identifiers of this Certificate.  # noqa: E501
        :rtype: list[list]
        """
        return self._policy_identifiers

    @policy_identifiers.setter
    def policy_identifiers(self, policy_identifiers):
        """Sets the policy_identifiers of this Certificate.

        policy identifiers  # noqa: E501

        :param policy_identifiers: The policy_identifiers of this Certificate.  # noqa: E501
        :type: list[list]
        """

        self._policy_identifiers = policy_identifiers

    @property
    def public_key(self):
        """Gets the public_key of this Certificate.  # noqa: E501

        public key  # noqa: E501

        :return: The public_key of this Certificate.  # noqa: E501
        :rtype: object
        """
        return self._public_key

    @public_key.setter
    def public_key(self, public_key):
        """Sets the public_key of this Certificate.

        public key  # noqa: E501

        :param public_key: The public_key of this Certificate.  # noqa: E501
        :type: object
        """

        self._public_key = public_key

    @property
    def public_key_algorithm(self):
        """Gets the public_key_algorithm of this Certificate.  # noqa: E501

        PublicKeyAlgorithm PublicKeyAlgorithm PublicKeyAlgorithm public key algorithm  # noqa: E501

        :return: The public_key_algorithm of this Certificate.  # noqa: E501
        :rtype: int
        """
        return self._public_key_algorithm

    @public_key_algorithm.setter
    def public_key_algorithm(self, public_key_algorithm):
        """Sets the public_key_algorithm of this Certificate.

        PublicKeyAlgorithm PublicKeyAlgorithm PublicKeyAlgorithm public key algorithm  # noqa: E501

        :param public_key_algorithm: The public_key_algorithm of this Certificate.  # noqa: E501
        :type: int
        """

        self._public_key_algorithm = public_key_algorithm

    @property
    def raw(self):
        """Gets the raw of this Certificate.  # noqa: E501

        raw  # noqa: E501

        :return: The raw of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._raw

    @raw.setter
    def raw(self, raw):
        """Sets the raw of this Certificate.

        raw  # noqa: E501

        :param raw: The raw of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._raw = raw

    @property
    def raw_issuer(self):
        """Gets the raw_issuer of this Certificate.  # noqa: E501

        raw issuer  # noqa: E501

        :return: The raw_issuer of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._raw_issuer

    @raw_issuer.setter
    def raw_issuer(self, raw_issuer):
        """Sets the raw_issuer of this Certificate.

        raw issuer  # noqa: E501

        :param raw_issuer: The raw_issuer of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._raw_issuer = raw_issuer

    @property
    def raw_subject(self):
        """Gets the raw_subject of this Certificate.  # noqa: E501

        raw subject  # noqa: E501

        :return: The raw_subject of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._raw_subject

    @raw_subject.setter
    def raw_subject(self, raw_subject):
        """Sets the raw_subject of this Certificate.

        raw subject  # noqa: E501

        :param raw_subject: The raw_subject of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._raw_subject = raw_subject

    @property
    def raw_subject_public_key_info(self):
        """Gets the raw_subject_public_key_info of this Certificate.  # noqa: E501

        raw subject public key info  # noqa: E501

        :return: The raw_subject_public_key_info of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._raw_subject_public_key_info

    @raw_subject_public_key_info.setter
    def raw_subject_public_key_info(self, raw_subject_public_key_info):
        """Sets the raw_subject_public_key_info of this Certificate.

        raw subject public key info  # noqa: E501

        :param raw_subject_public_key_info: The raw_subject_public_key_info of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._raw_subject_public_key_info = raw_subject_public_key_info

    @property
    def raw_tbs_certificate(self):
        """Gets the raw_tbs_certificate of this Certificate.  # noqa: E501

        raw t b s certificate  # noqa: E501

        :return: The raw_tbs_certificate of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._raw_tbs_certificate

    @raw_tbs_certificate.setter
    def raw_tbs_certificate(self, raw_tbs_certificate):
        """Sets the raw_tbs_certificate of this Certificate.

        raw t b s certificate  # noqa: E501

        :param raw_tbs_certificate: The raw_tbs_certificate of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._raw_tbs_certificate = raw_tbs_certificate

    @property
    def serial_number(self):
        """Gets the serial_number of this Certificate.  # noqa: E501

        Operations always take pointer arguments (*Int) rather than Int values, and each unique Int value requires its own unique *Int pointer. To \"copy\" an Int value, an existing (or newly allocated) Int must be set to a new value using the Int.Set method; shallow copies of Ints are not supported and may lead to errors.  # noqa: E501

        :return: The serial_number of this Certificate.  # noqa: E501
        :rtype: object
        """
        return self._serial_number

    @serial_number.setter
    def serial_number(self, serial_number):
        """Sets the serial_number of this Certificate.

        Operations always take pointer arguments (*Int) rather than Int values, and each unique Int value requires its own unique *Int pointer. To \"copy\" an Int value, an existing (or newly allocated) Int must be set to a new value using the Int.Set method; shallow copies of Ints are not supported and may lead to errors.  # noqa: E501

        :param serial_number: The serial_number of this Certificate.  # noqa: E501
        :type: object
        """

        self._serial_number = serial_number

    @property
    def signature(self):
        """Gets the signature of this Certificate.  # noqa: E501

        signature  # noqa: E501

        :return: The signature of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._signature

    @signature.setter
    def signature(self, signature):
        """Sets the signature of this Certificate.

        signature  # noqa: E501

        :param signature: The signature of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._signature = signature

    @property
    def signature_algorithm(self):
        """Gets the signature_algorithm of this Certificate.  # noqa: E501

        SignatureAlgorithm SignatureAlgorithm SignatureAlgorithm signature algorithm  # noqa: E501

        :return: The signature_algorithm of this Certificate.  # noqa: E501
        :rtype: int
        """
        return self._signature_algorithm

    @signature_algorithm.setter
    def signature_algorithm(self, signature_algorithm):
        """Sets the signature_algorithm of this Certificate.

        SignatureAlgorithm SignatureAlgorithm SignatureAlgorithm signature algorithm  # noqa: E501

        :param signature_algorithm: The signature_algorithm of this Certificate.  # noqa: E501
        :type: int
        """

        self._signature_algorithm = signature_algorithm

    @property
    def subject(self):
        """Gets the subject of this Certificate.  # noqa: E501


        :return: The subject of this Certificate.  # noqa: E501
        :rtype: Name
        """
        return self._subject

    @subject.setter
    def subject(self, subject):
        """Sets the subject of this Certificate.


        :param subject: The subject of this Certificate.  # noqa: E501
        :type: Name
        """

        self._subject = subject

    @property
    def subject_key_id(self):
        """Gets the subject_key_id of this Certificate.  # noqa: E501

        subject key Id  # noqa: E501

        :return: The subject_key_id of this Certificate.  # noqa: E501
        :rtype: list[int]
        """
        return self._subject_key_id

    @subject_key_id.setter
    def subject_key_id(self, subject_key_id):
        """Sets the subject_key_id of this Certificate.

        subject key Id  # noqa: E501

        :param subject_key_id: The subject_key_id of this Certificate.  # noqa: E501
        :type: list[int]
        """

        self._subject_key_id = subject_key_id

    @property
    def ur_is(self):
        """Gets the ur_is of this Certificate.  # noqa: E501

        u r is  # noqa: E501

        :return: The ur_is of this Certificate.  # noqa: E501
        :rtype: list[URL]
        """
        return self._ur_is

    @ur_is.setter
    def ur_is(self, ur_is):
        """Sets the ur_is of this Certificate.

        u r is  # noqa: E501

        :param ur_is: The ur_is of this Certificate.  # noqa: E501
        :type: list[URL]
        """

        self._ur_is = ur_is

    @property
    def unhandled_critical_extensions(self):
        """Gets the unhandled_critical_extensions of this Certificate.  # noqa: E501

        UnhandledCriticalExtensions contains a list of extension IDs that were not (fully) processed when parsing. Verify will fail if this slice is non-empty, unless verification is delegated to an OS library which understands all the critical extensions.  Users can access these extensions using Extensions and can remove elements from this slice if they believe that they have been handled.  # noqa: E501

        :return: The unhandled_critical_extensions of this Certificate.  # noqa: E501
        :rtype: list[list]
        """
        return self._unhandled_critical_extensions

    @unhandled_critical_extensions.setter
    def unhandled_critical_extensions(self, unhandled_critical_extensions):
        """Sets the unhandled_critical_extensions of this Certificate.

        UnhandledCriticalExtensions contains a list of extension IDs that were not (fully) processed when parsing. Verify will fail if this slice is non-empty, unless verification is delegated to an OS library which understands all the critical extensions.  Users can access these extensions using Extensions and can remove elements from this slice if they believe that they have been handled.  # noqa: E501

        :param unhandled_critical_extensions: The unhandled_critical_extensions of this Certificate.  # noqa: E501
        :type: list[list]
        """

        self._unhandled_critical_extensions = unhandled_critical_extensions

    @property
    def unknown_ext_key_usage(self):
        """Gets the unknown_ext_key_usage of this Certificate.  # noqa: E501

        unknown ext key usage  # noqa: E501

        :return: The unknown_ext_key_usage of this Certificate.  # noqa: E501
        :rtype: list[list]
        """
        return self._unknown_ext_key_usage

    @unknown_ext_key_usage.setter
    def unknown_ext_key_usage(self, unknown_ext_key_usage):
        """Sets the unknown_ext_key_usage of this Certificate.

        unknown ext key usage  # noqa: E501

        :param unknown_ext_key_usage: The unknown_ext_key_usage of this Certificate.  # noqa: E501
        :type: list[list]
        """

        self._unknown_ext_key_usage = unknown_ext_key_usage

    @property
    def version(self):
        """Gets the version of this Certificate.  # noqa: E501

        version  # noqa: E501

        :return: The version of this Certificate.  # noqa: E501
        :rtype: int
        """
        return self._version

    @version.setter
    def version(self, version):
        """Sets the version of this Certificate.

        version  # noqa: E501

        :param version: The version of this Certificate.  # noqa: E501
        :type: int
        """

        self._version = version

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, Certificate):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, Certificate):
            return True

        return self.to_dict() != other.to_dict()
