from datetime import datetime, timedelta
from pysequoia import Notation
from typing import Any, Final, final

@final
class DataFormat:
    Binary: Final[DataFormat]
    Text: Final[DataFormat]
    Unicode: Final[DataFormat]
    def __eq__(self, /, other: DataFormat) -> bool: ...
    def __int__(self, /) -> int: ...
    def __ne__(self, /, other: DataFormat) -> bool: ...
    def __repr__(self, /) -> str: ...

@final
class HashAlgorithm:
    MD5: Final[HashAlgorithm]
    RipeMD: Final[HashAlgorithm]
    SHA1: Final[HashAlgorithm]
    SHA224: Final[HashAlgorithm]
    SHA256: Final[HashAlgorithm]
    SHA384: Final[HashAlgorithm]
    SHA3_256: Final[HashAlgorithm]
    SHA3_512: Final[HashAlgorithm]
    SHA512: Final[HashAlgorithm]
    def __eq__(self, /, other: HashAlgorithm) -> bool: ...
    def __int__(self, /) -> int: ...
    def __ne__(self, /, other: HashAlgorithm) -> bool: ...
    def __repr__(self, /) -> str: ...

@final
class KeyFlags:
    def __repr__(self, /) -> str: ...
    @property
    def authentication(self, /) -> bool: ...
    @property
    def certification(self, /) -> bool: ...
    @property
    def signing(self, /) -> bool: ...
    @property
    def storage_encryption(self, /) -> bool: ...
    @property
    def transport_encryption(self, /) -> bool: ...

@final
class Packet:
    def __repr__(self, /) -> str: ...
    @property
    def body(self, /) -> bytes: ...
    @property
    def exportable(self, /) -> bool |None: ...
    @property
    def fingerprint(self, /) -> str |None: ...
    @property
    def hash_algorithm(self, /) -> HashAlgorithm |None: ...
    @property
    def issuer_fingerprint(self, /) -> str |None: ...
    @property
    def issuer_key_id(self, /) -> str |None: ...
    @property
    def key_algorithm(self, /) -> PublicKeyAlgorithm |None: ...
    @property
    def key_created(self, /) -> datetime |None: ...
    @property
    def key_flags(self, /) -> KeyFlags |None: ...
    @property
    def key_id(self, /) -> str |None: ...
    @property
    def key_validity_period(self, /) -> timedelta |None: ...
    @property
    def literal_data(self, /) -> bytes |None: ...
    @property
    def literal_date(self, /) -> datetime |None: ...
    @property
    def literal_filename(self, /) -> str |None: ...
    @property
    def literal_format(self, /) -> DataFormat |None: ...
    @property
    def notations(self, /) -> list[Notation] |None: ...
    @property
    def ops_issuer(self, /) -> str |None: ...
    @property
    def ops_signature_type(self, /) -> SignatureType |None: ...
    @property
    def primary_userid(self, /) -> bool |None: ...
    @property
    def signature_created(self, /) -> datetime |None: ...
    @property
    def signature_expiration_time(self, /) -> datetime |None: ...
    @property
    def signature_type(self, /) -> SignatureType |None: ...
    @property
    def signature_validity_period(self, /) -> timedelta |None: ...
    @property
    def signature_version(self, /) -> int |None: ...
    @property
    def signers_user_id(self, /) -> str |None: ...
    @property
    def tag(self, /) -> Tag: ...
    @property
    def user_id(self, /) -> str |None: ...
    @property
    def user_id_comment(self, /) -> str |None: ...
    @property
    def user_id_email(self, /) -> str |None: ...
    @property
    def user_id_name(self, /) -> str |None: ...

@final
class PacketPile:
    def __iter__(self, /) -> Any: ...
    def __len__(self, /) -> int: ...
    def __repr__(self, /) -> str: ...
    @staticmethod
    def from_bytes(bytes: bytes) -> PacketPile: ...
    @staticmethod
    def from_file(path: str) -> PacketPile: ...

@final
class PublicKeyAlgorithm:
    DSA: Final[PublicKeyAlgorithm]
    ECDH: Final[PublicKeyAlgorithm]
    ECDSA: Final[PublicKeyAlgorithm]
    Ed25519: Final[PublicKeyAlgorithm]
    Ed448: Final[PublicKeyAlgorithm]
    EdDSA: Final[PublicKeyAlgorithm]
    ElGamalEncrypt: Final[PublicKeyAlgorithm]
    ElGamalEncryptSign: Final[PublicKeyAlgorithm]
    RSAEncrypt: Final[PublicKeyAlgorithm]
    RSAEncryptSign: Final[PublicKeyAlgorithm]
    RSASign: Final[PublicKeyAlgorithm]
    X25519: Final[PublicKeyAlgorithm]
    X448: Final[PublicKeyAlgorithm]
    def __eq__(self, /, other: PublicKeyAlgorithm) -> bool: ...
    def __int__(self, /) -> int: ...
    def __ne__(self, /, other: PublicKeyAlgorithm) -> bool: ...
    def __repr__(self, /) -> str: ...

@final
class SignatureType:
    Binary: Final[SignatureType]
    CasualCertification: Final[SignatureType]
    CertificationApproval: Final[SignatureType]
    CertificationRevocation: Final[SignatureType]
    Confirmation: Final[SignatureType]
    DirectKey: Final[SignatureType]
    GenericCertification: Final[SignatureType]
    KeyRevocation: Final[SignatureType]
    PersonaCertification: Final[SignatureType]
    PositiveCertification: Final[SignatureType]
    PrimaryKeyBinding: Final[SignatureType]
    Standalone: Final[SignatureType]
    SubkeyBinding: Final[SignatureType]
    SubkeyRevocation: Final[SignatureType]
    Text: Final[SignatureType]
    Timestamp: Final[SignatureType]
    def __eq__(self, /, other: SignatureType) -> bool: ...
    def __int__(self, /) -> int: ...
    def __ne__(self, /, other: SignatureType) -> bool: ...
    def __repr__(self, /) -> str: ...

@final
class Tag:
    AED: Final[Tag]
    CompressedData: Final[Tag]
    Literal: Final[Tag]
    MDC: Final[Tag]
    Marker: Final[Tag]
    OnePassSig: Final[Tag]
    PKESK: Final[Tag]
    Padding: Final[Tag]
    PublicKey: Final[Tag]
    PublicSubkey: Final[Tag]
    Reserved: Final[Tag]
    SED: Final[Tag]
    SEIP: Final[Tag]
    SKESK: Final[Tag]
    SecretKey: Final[Tag]
    SecretSubkey: Final[Tag]
    Signature: Final[Tag]
    Trust: Final[Tag]
    UserAttribute: Final[Tag]
    UserID: Final[Tag]
    def __eq__(self, /, other: Tag) -> bool: ...
    def __int__(self, /) -> int: ...
    def __ne__(self, /, other: Tag) -> bool: ...
    def __repr__(self, /) -> str: ...
