# Stubs for OpenSSL.crypto (Python 3)
#
# NOTE: This dynamically typed stub was automatically generated by stubgen.

from typing import Any
from typing import Optional

FILETYPE_PEM: Any
FILETYPE_ASN1: Any
FILETYPE_TEXT: Any
TYPE_RSA: Any
TYPE_DSA: Any

class Error(Exception): ...

class _X509NameInvalidator:
    def __init__(self) -> None: ...
    def add(self, name: Any) -> None: ...
    def clear(self) -> None: ...

class PKey:
    def __init__(self) -> None: ...
    def to_cryptography_key(self): ...
    @classmethod
    def from_cryptography_key(cls, crypto_key: Any): ...
    def generate_key(self, type: Any, bits: Any) -> None: ...
    def check(self): ...
    def type(self): ...
    def bits(self): ...

class _EllipticCurve:
    def __ne__(self, other: Any): ...
    @classmethod
    def from_nid(cls, lib: Any, nid: Any): ...
    name: Any = ...
    def __init__(self, lib: Any, nid: Any, name: Any) -> None: ...

def get_elliptic_curves(): ...
def get_elliptic_curve(name: Any): ...

class X509Name:
    def __init__(self, name: Any) -> None: ...
    def __setattr__(self, name: Any, value: Any): ...
    def __getattr__(self, name: Any): ...
    __eq__: Any = ...
    __ne__: Any = ...
    __lt__: Any = ...
    __le__: Any = ...
    __gt__: Any = ...
    __ge__: Any = ...
    def hash(self): ...
    def der(self): ...
    def get_components(self): ...

class X509Extension:
    def __init__(
        self,
        type_name: Any,
        critical: Any,
        value: Any,
        subject: Optional[Any] = ...,
        issuer: Optional[Any] = ...,
    ) -> None: ...
    def get_critical(self): ...
    def get_short_name(self): ...
    def get_data(self): ...

class X509Req:
    def __init__(self) -> None: ...
    def to_cryptography(self): ...
    @classmethod
    def from_cryptography(cls, crypto_req: Any): ...
    def set_pubkey(self, pkey: Any) -> None: ...
    def get_pubkey(self): ...
    def set_version(self, version: Any) -> None: ...
    def get_version(self): ...
    def get_subject(self): ...
    def add_extensions(self, extensions: Any) -> None: ...
    def get_extensions(self): ...
    def sign(self, pkey: Any, digest: Any) -> None: ...
    def verify(self, pkey: Any): ...

class X509:
    def __init__(self) -> None: ...
    def to_cryptography(self): ...
    @classmethod
    def from_cryptography(cls, crypto_cert: Any): ...
    def set_version(self, version: Any) -> None: ...
    def get_version(self): ...
    def get_pubkey(self): ...
    def set_pubkey(self, pkey: Any) -> None: ...
    def sign(self, pkey: Any, digest: Any) -> None: ...
    def get_signature_algorithm(self): ...
    def digest(self, digest_name: Any): ...
    def subject_name_hash(self): ...
    def set_serial_number(self, serial: Any) -> None: ...
    def get_serial_number(self): ...
    def gmtime_adj_notAfter(self, amount: Any) -> None: ...
    def gmtime_adj_notBefore(self, amount: Any) -> None: ...
    def has_expired(self): ...
    def get_notBefore(self): ...
    def set_notBefore(self, when: Any): ...
    def get_notAfter(self): ...
    def set_notAfter(self, when: Any): ...
    def get_issuer(self): ...
    def set_issuer(self, issuer: Any) -> None: ...
    def get_subject(self): ...
    def set_subject(self, subject: Any) -> None: ...
    def get_extension_count(self): ...
    def add_extensions(self, extensions: Any) -> None: ...
    def get_extension(self, index: Any): ...

class X509StoreFlags:
    CRL_CHECK: Any = ...
    CRL_CHECK_ALL: Any = ...
    IGNORE_CRITICAL: Any = ...
    X509_STRICT: Any = ...
    ALLOW_PROXY_CERTS: Any = ...
    POLICY_CHECK: Any = ...
    EXPLICIT_POLICY: Any = ...
    INHIBIT_MAP: Any = ...
    NOTIFY_POLICY: Any = ...
    CHECK_SS_SIGNATURE: Any = ...
    CB_ISSUER_CHECK: Any = ...

class X509Store:
    def __init__(self) -> None: ...
    def add_cert(self, cert: Any) -> None: ...
    def add_crl(self, crl: Any) -> None: ...
    def set_flags(self, flags: Any) -> None: ...
    def set_time(self, vfy_time: Any) -> None: ...

class X509StoreContextError(Exception):
    certificate: Any = ...
    def __init__(self, message: Any, certificate: Any) -> None: ...

class X509StoreContext:
    def __init__(self, store: Any, certificate: Any) -> None: ...
    def set_store(self, store: Any) -> None: ...
    def verify_certificate(self) -> None: ...

def load_certificate(type: Any, buffer: Any): ...
def dump_certificate(type: Any, cert: Any): ...
def dump_publickey(type: Any, pkey: Any): ...
def dump_privatekey(type: Any, pkey: Any, cipher: Optional[Any] = ..., passphrase: Optional[Any] = ...): ...

class Revoked:
    def __init__(self) -> None: ...
    def set_serial(self, hex_str: Any) -> None: ...
    def get_serial(self): ...
    def set_reason(self, reason: Any) -> None: ...
    def get_reason(self): ...
    def all_reasons(self): ...
    def set_rev_date(self, when: Any): ...
    def get_rev_date(self): ...

class CRL:
    def __init__(self) -> None: ...
    def to_cryptography(self): ...
    @classmethod
    def from_cryptography(cls, crypto_crl: Any): ...
    def get_revoked(self): ...
    def add_revoked(self, revoked: Any) -> None: ...
    def get_issuer(self): ...
    def set_version(self, version: Any) -> None: ...
    def set_lastUpdate(self, when: Any): ...
    def set_nextUpdate(self, when: Any): ...
    def sign(self, issuer_cert: Any, issuer_key: Any, digest: Any) -> None: ...
    def export(self, cert: Any, key: Any, type: Any = ..., days: int = ..., digest: Any = ...): ...

class PKCS7:
    def type_is_signed(self): ...
    def type_is_enveloped(self): ...
    def type_is_signedAndEnveloped(self): ...
    def type_is_data(self): ...
    def get_type_name(self): ...

class PKCS12:
    def __init__(self) -> None: ...
    def get_certificate(self): ...
    def set_certificate(self, cert: Any) -> None: ...
    def get_privatekey(self): ...
    def set_privatekey(self, pkey: Any) -> None: ...
    def get_ca_certificates(self): ...
    def set_ca_certificates(self, cacerts: Any) -> None: ...
    def set_friendlyname(self, name: Any) -> None: ...
    def get_friendlyname(self): ...
    def export(self, passphrase: Optional[Any] = ..., iter: int = ..., maciter: int = ...): ...

class NetscapeSPKI:
    def __init__(self) -> None: ...
    def sign(self, pkey: Any, digest: Any) -> None: ...
    def verify(self, key: Any): ...
    def b64_encode(self): ...
    def get_pubkey(self): ...
    def set_pubkey(self, pkey: Any) -> None: ...

class _PassphraseHelper:
    def __init__(self, type: Any, passphrase: Any, more_args: bool = ..., truncate: bool = ...) -> None: ...
    @property
    def callback(self): ...
    @property
    def callback_args(self): ...
    def raise_if_problem(self, exceptionType: Any = ...) -> None: ...

def load_publickey(type: Any, buffer: Any): ...
def load_privatekey(type: Any, buffer: Any, passphrase: Optional[Any] = ...): ...
def dump_certificate_request(type: Any, req: Any): ...
def load_certificate_request(type: Any, buffer: Any): ...
def sign(pkey: Any, data: Any, digest: Any): ...
def verify(cert: Any, signature: Any, data: Any, digest: Any) -> None: ...
def dump_crl(type: Any, crl: Any): ...
def load_crl(type: Any, buffer: Any): ...
def load_pkcs7_data(type: Any, buffer: Any): ...
def load_pkcs12(buffer: Any, passphrase: Optional[Any] = ...): ...
