# Hierarchy For All Packages

Package Hierarchies:

- org.gnupg,
- org.pgpainless,
- org.pgpainless.algorithm,
- org.pgpainless.algorithm.negotiation,
- org.pgpainless.authentication,
- org.pgpainless.decryption_verification,
- org.pgpainless.decryption_verification.cleartext_signatures,
- org.pgpainless.decryption_verification.syntax_check,
- org.pgpainless.encryption_signing,
- org.pgpainless.exception,
- org.pgpainless.implementation,
- org.pgpainless.key,
- org.pgpainless.key.certification,
- org.pgpainless.key.collection,
- org.pgpainless.key.generation,
- org.pgpainless.key.generation.type,
- org.pgpainless.key.generation.type.ecc,
- org.pgpainless.key.generation.type.ecc.ecdh,
- org.pgpainless.key.generation.type.ecc.ecdsa,
- org.pgpainless.key.generation.type.eddsa,
- org.pgpainless.key.generation.type.elgamal,
- org.pgpainless.key.generation.type.rsa,
- org.pgpainless.key.generation.type.xdh,
- org.pgpainless.key.info,
- org.pgpainless.key.modification.secretkeyring,
- org.pgpainless.key.parsing,
- org.pgpainless.key.protection,
- org.pgpainless.key.protection.fixes,
- org.pgpainless.key.protection.passphrase_provider,
- org.pgpainless.key.util,
- org.pgpainless.policy,
- org.pgpainless.provider,
- org.pgpainless.signature,
- org.pgpainless.signature.builder,
- org.pgpainless.signature.consumer,
- org.pgpainless.signature.subpackets,
- org.pgpainless.util,
- org.pgpainless.util.selection.keyring,
- org.pgpainless.util.selection.keyring.impl,
- org.pgpainless.util.selection.userid

## Class Hierarchy

- java.lang.Object
  - org.pgpainless.signature.builder.AbstractSignatureBuilder<B>
    - org.pgpainless.signature.builder.DirectKeySelfSignatureBuilder
    - org.pgpainless.signature.builder.PrimaryKeyBindingSignatureBuilder
    - org.pgpainless.signature.builder.RevocationSignatureBuilder
    - org.pgpainless.signature.builder.SelfSignatureBuilder
    - org.pgpainless.signature.builder.SubkeyBindingSignatureBuilder
    - org.pgpainless.signature.builder.ThirdPartyCertificationSignatureBuilder
    - org.pgpainless.signature.builder.ThirdPartyDirectKeySignatureBuilder
    - org.pgpainless.signature.builder.UniversalSignatureBuilder
  - org.pgpainless.algorithm.AlgorithmSuite
  - org.pgpainless.util.ArmoredInputStreamFactory
  - org.pgpainless.util.ArmoredOutputStreamFactory
  - org.pgpainless.util.ArmorUtils
  - org.pgpainless.key.protection.BaseSecretKeyRingProtector (implements org.pgpainless.key.protection.SecretKeyRingProtector)
    - org.pgpainless.key.protection.PasswordBasedSecretKeyRingProtector
  - org.pgpainless.encryption_signing.BcHashContextSigner
  - org.bouncycastle.openpgp.operator.bc.BcPublicKeyDataDecryptorFactory (implements org.bouncycastle.openpgp.operator.PublicKeyDataDecryptorFactory)
    - org.pgpainless.decryption_verification.CachingBcPublicKeyDataDecryptorFactory (implements org.pgpainless.decryption_verification.CustomPublicKeyDataDecryptorFactory)
  - org.pgpainless.key.protection.CachingSecretKeyRingProtector (implements org.pgpainless.key.protection.passphrase_provider.SecretKeyPassphraseProvider, org.pgpainless.key.protection.SecretKeyRingProtector)
  - org.pgpainless.authentication.CertificateAuthenticity
  - org.pgpainless.authentication.CertificateAuthenticity.CertificationChain
  - org.pgpainless.authentication.CertificateAuthenticity.ChainLink
  - org.pgpainless.signature.consumer.CertificateValidator
  - org.pgpainless.key.certification.CertifyCertificate
  - org.pgpainless.key.certification.CertifyCertificate.CertificationOnUserId
  - org.pgpainless.key.certification.CertifyCertificate.CertificationOnUserIdWithSubpackets
  - org.pgpainless.key.certification.CertifyCertificate.CertificationResult
  - org.pgpainless.key.certification.CertifyCertificate.DelegationOnCertificate
  - org.pgpainless.key.certification.CertifyCertificate.DelegationOnCertificateWithSubpackets
  - org.pgpainless.decryption_verification.cleartext_signatures.ClearsignedMessageUtil
  - org.pgpainless.util.CollectionUtils
  - org.pgpainless.decryption_verification.ConsumerOptions
  - org.pgpainless.decryption_verification.ConsumerOptions.CertificateSource
  - org.pgpainless.util.DateUtil
  - org.pgpainless.decryption_verification.DecryptionBuilder (implements org.pgpainless.decryption_verification.DecryptionBuilderInterface)
  - org.pgpainless.key.generation.type.ecc.ecdh.ECDH (implements org.pgpainless.key.generation.type.KeyType)
  - org.pgpainless.key.generation.type.ecc.ecdsa.ECDSA (implements org.pgpainless.key.generation.type.KeyType)
  - org.pgpainless.key.generation.type.eddsa.EdDSA (implements org.pgpainless.key.generation.type.KeyType)
  - org.pgpainless.key.generation.type.elgamal.ElGamal (implements org.pgpainless.key.generation.type.KeyType)
  - org.pgpainless.encryption_signing.EncryptionBuilder (implements org.pgpainless.encryption_signing.EncryptionBuilderInterface)
  - org.pgpainless.encryption_signing.EncryptionOptions
  - org.pgpainless.encryption_signing.EncryptionResult
  - org.pgpainless.encryption_signing.EncryptionResult.Builder
  - org.pgpainless.util.selection.keyring.impl.ExactUserId
  - org.gnupg.GnuPGDummyKeyUtil
  - org.gnupg.GnuPGDummyKeyUtil.Builder
  - org.pgpainless.decryption_verification.HardwareSecurity
  - org.pgpainless.decryption_verification.HardwareSecurity.HardwareDataDecryptorFactory (implements org.pgpainless.decryption_verification.CustomPublicKeyDataDecryptorFactory)
  - org.pgpainless.implementation.ImplementationFactory
    - org.pgpainless.implementation.BcImplementationFactory
    - org.pgpainless.implementation.JceImplementationFactory
  - org.pgpainless.decryption_verification.cleartext_signatures.InMemoryMultiPassStrategy (implements org.pgpainless.decryption_verification.cleartext_signatures.MultiPassStrategy)
  - java.io.InputStream (implements java.io.Closeable)
    - org.bouncycastle.bcpg.ArmoredInputStream
      - org.pgpainless.util.CRCingArmoredInputStreamWrapper
    - org.pgpainless.decryption_verification.DecryptionStream
      - org.pgpainless.decryption_verification.OpenPgpMessageInputStream
    - java.io.FilterInputStream
      - java.io.BufferedInputStream
        - org.pgpainless.decryption_verification.OpenPgpInputStream
    - org.pgpainless.decryption_verification.IntegrityProtectedInputStream
    - org.pgpainless.decryption_verification.TeeBCPGInputStream.DelayedTeeInputStream
  - org.pgpainless.key.info.KeyAccessor
    - org.pgpainless.key.info.KeyAccessor.SubKey
    - org.pgpainless.key.info.KeyAccessor.ViaKeyId
    - org.pgpainless.key.info.KeyAccessor.ViaUserId
  - org.pgpainless.key.util.KeyIdUtil
  - org.pgpainless.key.info.KeyInfo
  - org.pgpainless.key.generation.KeyRingBuilder (implements org.pgpainless.key.generation.KeyRingBuilderInterface<B>)
  - org.pgpainless.key.info.KeyRingInfo
  - org.pgpainless.key.info.KeyRingInfo.Signatures
  - org.pgpainless.key.protection.KeyRingProtectionSettings
  - org.pgpainless.key.parsing.KeyRingReader
  - org.pgpainless.key.generation.KeyRingTemplates
  - org.pgpainless.key.util.KeyRingUtils
  - org.pgpainless.key.generation.KeySpec
  - org.pgpainless.key.generation.KeySpecBuilder (implements org.pgpainless.key.generation.KeySpecBuilderInterface)
  - org.pgpainless.key.protection.passphrase_provider.MapBasedPassphraseProvider (implements org.pgpainless.key.protection.passphrase_provider.SecretKeyPassphraseProvider)
  - org.pgpainless.decryption_verification.MessageInspector
  - org.pgpainless.decryption_verification.MessageInspector.EncryptionInfo
  - org.pgpainless.decryption_verification.MessageMetadata
  - org.pgpainless.decryption_verification.MessageMetadata.Layer (implements org.pgpainless.decryption_verification.MessageMetadata.Packet)
    - org.pgpainless.decryption_verification.MessageMetadata.CompressedData (implements org.pgpainless.decryption_verification.MessageMetadata.Nested)
    - org.pgpainless.decryption_verification.MessageMetadata.EncryptedData (implements org.pgpainless.decryption_verification.MessageMetadata.Nested)
    - org.pgpainless.decryption_verification.MessageMetadata.Message
  - org.pgpainless.decryption_verification.MessageMetadata.LiteralData (implements org.pgpainless.decryption_verification.MessageMetadata.Nested)
  - org.pgpainless.util.MultiMap<K,V>
  - org.pgpainless.util.NotationRegistry
  - org.pgpainless.signature.consumer.OnePassSignatureCheck
  - org.pgpainless.key.OpenPgpFingerprint (implements java.lang.CharSequence, java.lang.Comparable<T>)
    - org.pgpainless.key._64DigitFingerprint
      - org.pgpainless.key.OpenPgpV5Fingerprint
      - org.pgpainless.key.OpenPgpV6Fingerprint
    - org.pgpainless.key.OpenPgpV4Fingerprint
  - org.pgpainless.key.util.OpenPgpKeyAttributeUtil
  - org.pgpainless.decryption_verification.syntax_check.OpenPgpMessageSyntax (implements org.pgpainless.decryption_verification.syntax_check.Syntax)
  - org.pgpainless.decryption_verification.OpenPgpMetadata
  - org.pgpainless.decryption_verification.OpenPgpMetadata.Builder
  - java.io.OutputStream (implements java.io.Closeable, java.io.Flushable)
    - org.pgpainless.encryption_signing.CRLFGeneratorStream
    - org.pgpainless.encryption_signing.EncryptionStream
  - org.pgpainless.util.Passphrase
  - org.pgpainless.decryption_verification.syntax_check.PDA
  - org.pgpainless.PGPainless
  - org.pgpainless.key.collection.PGPKeyRingCollection
  - org.pgpainless.policy.Policy
  - org.pgpainless.policy.Policy.CompressionAlgorithmPolicy
  - org.pgpainless.policy.Policy.HashAlgorithmPolicy
  - org.pgpainless.policy.Policy.PublicKeyAlgorithmPolicy
  - org.pgpainless.policy.Policy.SymmetricKeyAlgorithmPolicy
  - org.pgpainless.encryption_signing.ProducerOptions
  - org.pgpainless.provider.ProviderFactory
    - org.pgpainless.provider.BouncyCastleProviderFactory
  - org.pgpainless.key.util.PublicKeyParameterValidationUtil
  - org.pgpainless.util.selection.keyring.PublicKeyRingSelectionStrategy<O> (implements org.pgpainless.util.selection.keyring.KeyRingSelectionStrategy<R,C,O>)
    - org.pgpainless.util.selection.keyring.impl.ExactUserId.PubRingSelectionStrategy
      - org.pgpainless.util.selection.keyring.impl.XMPP.PubRingSelectionStrategy
    - org.pgpainless.util.selection.keyring.impl.Whitelist.PubRingSelectionStrategy<O>
    - org.pgpainless.util.selection.keyring.impl.Wildcard.PubRingSelectionStrategy<O>
  - org.pgpainless.key.util.RevocationAttributes
  - org.pgpainless.key.util.RevocationAttributes.WithDescription
  - org.pgpainless.key.util.RevocationAttributes.WithReason
  - org.pgpainless.algorithm.RevocationState (implements java.lang.Comparable<T>)
  - org.pgpainless.key.generation.type.rsa.RSA (implements org.pgpainless.key.generation.type.KeyType)
  - org.pgpainless.key.protection.fixes.S2KUsageFix
  - org.pgpainless.key.modification.secretkeyring.SecretKeyRingEditor (implements org.pgpainless.key.modification.secretkeyring.SecretKeyRingEditorInterface)
  - org.pgpainless.util.selection.keyring.SecretKeyRingSelectionStrategy<O> (implements org.pgpainless.util.selection.keyring.KeyRingSelectionStrategy<R,C,O>)
    - org.pgpainless.util.selection.keyring.impl.ExactUserId.SecRingSelectionStrategy
      - org.pgpainless.util.selection.keyring.impl.XMPP.SecRingSelectionStrategy
    - org.pgpainless.util.selection.keyring.impl.Whitelist.SecRingSelectionStrategy<O>
    - org.pgpainless.util.selection.keyring.impl.Wildcard.SecRingSelectionStrategy<O>
  - org.pgpainless.util.selection.userid.SelectUserId
  - org.pgpainless.util.SessionKey
  - org.pgpainless.signature.consumer.SignatureCheck
  - org.pgpainless.signature.consumer.SignatureCreationDateComparator (implements java.util.Comparator<T>)
  - org.pgpainless.signature.consumer.SignaturePicker
  - org.pgpainless.signature.subpackets.SignatureSubpackets (implements org.pgpainless.signature.subpackets.BaseSignatureSubpackets, org.pgpainless.signature.subpackets.CertificationSubpackets, org.pgpainless.signature.subpackets.RevocationSignatureSubpackets, org.pgpainless.signature.subpackets.SelfSignatureSubpackets)
  - org.pgpainless.signature.subpackets.SignatureSubpacketsHelper
  - org.pgpainless.signature.subpackets.SignatureSubpacketsUtil
  - org.pgpainless.signature.SignatureUtils
  - org.pgpainless.signature.consumer.SignatureValidator
  - org.pgpainless.signature.consumer.SignatureValidityComparator (implements java.util.Comparator<T>)
  - org.pgpainless.decryption_verification.SignatureVerification
  - org.pgpainless.decryption_verification.SignatureVerification.Failure
  - org.pgpainless.signature.consumer.SignatureVerifier
  - org.pgpainless.encryption_signing.SigningOptions
  - org.pgpainless.encryption_signing.SigningOptions.SigningMethod
  - org.pgpainless.key.protection.passphrase_provider.SolitaryPassphraseProvider (implements org.pgpainless.key.protection.passphrase_provider.SecretKeyPassphraseProvider)
  - org.pgpainless.key.SubkeyIdentifier
  - org.pgpainless.decryption_verification.TeeBCPGInputStream
  - java.lang.Throwable (implements java.io.Serializable)
    - java.lang.Error
      - java.lang.AssertionError
        - org.pgpainless.exception.KeyIntegrityException
    - java.lang.Exception
      - org.pgpainless.decryption_verification.HardwareSecurity.HardwareSecurityException
      - java.io.IOException
        - org.pgpainless.exception.ModificationDetectionException
      - org.bouncycastle.openpgp.PGPException
        - org.pgpainless.exception.MessageNotIntegrityProtectedException
        - org.pgpainless.exception.MissingDecryptionMethodException
        - org.pgpainless.exception.MissingPassphraseException
        - org.pgpainless.exception.SignatureValidationException
        - org.pgpainless.exception.UnacceptableAlgorithmException
        - org.pgpainless.exception.WrongConsumingMethodException
        - org.pgpainless.exception.WrongPassphraseException
      - java.lang.RuntimeException
        - org.pgpainless.exception.KeyException
          - org.pgpainless.exception.KeyException.ExpiredKeyException
          - org.pgpainless.exception.KeyException.MissingSecretKeyException
          - org.pgpainless.exception.KeyException.PublicKeyAlgorithmPolicyException
          - org.pgpainless.exception.KeyException.RevokedKeyException
          - org.pgpainless.exception.KeyException.UnacceptableEncryptionKeyException
          - org.pgpainless.exception.KeyException.UnacceptableSelfSignatureException
          - org.pgpainless.exception.KeyException.UnacceptableSigningKeyException
          - org.pgpainless.exception.KeyException.UnboundUserIdException
        - org.pgpainless.exception.MalformedOpenPgpMessageException
  - org.pgpainless.decryption_verification.syntax_check.Transition
  - org.pgpainless.algorithm.Trustworthiness
  - org.pgpainless.algorithm.Trustworthiness.Builder
  - org.pgpainless.util.Tuple<A,B>
  - org.pgpainless.key.protection.UnlockSecretKey
  - org.pgpainless.key.protection.UnprotectedKeysProtector (implements org.pgpainless.key.protection.SecretKeyRingProtector)
  - org.pgpainless.key.util.UserId (implements java.lang.CharSequence)
  - org.pgpainless.key.util.UserId.Builder
  - org.pgpainless.key.util.UserId.DefaultComparator (implements java.util.Comparator<T>)
  - org.pgpainless.key.util.UserId.DefaultIgnoreCaseComparator (implements java.util.Comparator<T>)
  - org.pgpainless.util.selection.keyring.impl.Whitelist
  - org.pgpainless.util.selection.keyring.impl.Wildcard
  - org.pgpainless.decryption_verification.cleartext_signatures.WriteToFileMultiPassStrategy (implements org.pgpainless.decryption_verification.cleartext_signatures.MultiPassStrategy)
  - org.pgpainless.key.generation.type.xdh.XDH (implements org.pgpainless.key.generation.type.KeyType)
  - org.pgpainless.util.selection.keyring.impl.XMPP

## Interface Hierarchy

- org.pgpainless.signature.subpackets.BaseSignatureSubpackets
  - org.pgpainless.signature.subpackets.CertificationSubpackets
  - org.pgpainless.signature.subpackets.RevocationSignatureSubpackets
  - org.pgpainless.signature.subpackets.SelfSignatureSubpackets
- org.pgpainless.authentication.CertificateAuthority
- org.pgpainless.decryption_verification.DecryptionBuilderInterface
- org.pgpainless.decryption_verification.DecryptionBuilderInterface.DecryptWith
- org.pgpainless.encryption_signing.EncryptionBuilderInterface
- org.pgpainless.encryption_signing.EncryptionBuilderInterface.WithOptions
- org.pgpainless.encryption_signing.EncryptionOptions.EncryptionKeySelector
- org.gnupg.GnuPGDummyKeyUtil.KeyFilter
- org.pgpainless.decryption_verification.HardwareSecurity.DecryptionCallback
- org.pgpainless.algorithm.negotiation.HashAlgorithmNegotiator
- org.pgpainless.key.generation.type.KeyLength
- org.pgpainless.key.generation.KeyRingBuilderInterface<B>
- org.pgpainless.util.selection.keyring.KeyRingSelectionStrategy<R,C,O>
- org.pgpainless.key.generation.KeySpecBuilderInterface
- org.pgpainless.key.generation.type.KeyType
- org.pgpainless.decryption_verification.MessageMetadata.Function<A,B>
- org.pgpainless.decryption_verification.MessageMetadata.Packet
  - org.pgpainless.decryption_verification.MessageMetadata.Nested
- org.pgpainless.decryption_verification.MissingPublicKeyCallback
- org.pgpainless.decryption_verification.cleartext_signatures.MultiPassStrategy
- org.bouncycastle.openpgp.operator.PGPDataDecryptorFactory
  - org.bouncycastle.openpgp.operator.PublicKeyDataDecryptorFactory
    - org.pgpainless.decryption_verification.CustomPublicKeyDataDecryptorFactory
- org.pgpainless.key.protection.passphrase_provider.SecretKeyPassphraseProvider
- org.pgpainless.key.modification.secretkeyring.SecretKeyRingEditorInterface
- org.pgpainless.key.modification.secretkeyring.SecretKeyRingEditorInterface.WithKeyRingEncryptionSettings
- org.pgpainless.key.modification.secretkeyring.SecretKeyRingEditorInterface.WithPassphrase
- org.pgpainless.key.protection.SecretKeyRingProtector
- org.pgpainless.signature.subpackets.SignatureSubpacketCallback<S>
  - org.pgpainless.signature.subpackets.BaseSignatureSubpackets.Callback
  - org.pgpainless.signature.subpackets.CertificationSubpackets.Callback
  - org.pgpainless.signature.subpackets.RevocationSignatureSubpackets.Callback
  - org.pgpainless.signature.subpackets.SelfSignatureSubpackets.Callback
  - org.pgpainless.signature.subpackets.SignatureSubpackets.Callback
- org.pgpainless.algorithm.negotiation.SymmetricKeyAlgorithmNegotiator
- org.pgpainless.decryption_verification.syntax_check.Syntax

## Enum Class Hierarchy

- java.lang.Object
  - java.lang.Enum<E> (implements java.lang.Comparable<T>, java.lang.constant.Constable, java.io.Serializable)
    - org.pgpainless.algorithm.AEADAlgorithm
    - org.pgpainless.algorithm.CertificationType
    - org.pgpainless.algorithm.CompressionAlgorithm
    - org.pgpainless.algorithm.DocumentSignatureType
    - org.pgpainless.key.generation.type.eddsa.EdDSACurve
    - org.pgpainless.key.generation.type.elgamal.ElGamalLength (implements org.pgpainless.key.generation.type.KeyLength)
    - org.pgpainless.key.generation.type.ecc.EllipticCurve
    - org.pgpainless.algorithm.EncryptionPurpose
    - org.pgpainless.algorithm.Feature
    - org.gnupg.GnuPGDummyExtension
    - org.pgpainless.algorithm.HashAlgorithm
    - org.pgpainless.decryption_verification.syntax_check.InputSymbol
    - org.pgpainless.algorithm.KeyFlag
    - org.pgpainless.decryption_verification.MissingKeyPassphraseStrategy
    - org.pgpainless.algorithm.OpenPgpPacket
    - org.pgpainless.policy.Policy.SignerUserIdValidationLevel
    - org.pgpainless.algorithm.PublicKeyAlgorithm
    - org.pgpainless.key.util.RevocationAttributes.Reason
    - org.pgpainless.key.util.RevocationAttributes.RevocationType
    - org.pgpainless.algorithm.RevocationStateType
    - org.pgpainless.key.generation.type.rsa.RsaLength (implements org.pgpainless.key.generation.type.KeyLength)
    - org.pgpainless.signature.consumer.SignatureCreationDateComparator.Order
    - org.pgpainless.algorithm.SignatureSubpacket
    - org.pgpainless.algorithm.SignatureType
    - org.pgpainless.decryption_verification.syntax_check.StackSymbol
    - org.pgpainless.decryption_verification.syntax_check.State
    - org.pgpainless.algorithm.StreamEncoding
    - org.pgpainless.algorithm.SymmetricKeyAlgorithm
    - org.pgpainless.key.generation.type.xdh.XDHSpec