Class AbstractPublicKeyDataDecryptorFactory

java.lang.Object
org.bouncycastle.openpgp.operator.AbstractPublicKeyDataDecryptorFactory
All Implemented Interfaces:
PGPDataDecryptorFactory, PublicKeyDataDecryptorFactory
Direct Known Subclasses:
AbstractExternalPublicKeyDataDecryptorFactory, BcPublicKeyDataDecryptorFactory

public abstract class AbstractPublicKeyDataDecryptorFactory extends Object implements PublicKeyDataDecryptorFactory
  • Constructor Details

    • AbstractPublicKeyDataDecryptorFactory

      public AbstractPublicKeyDataDecryptorFactory()
  • Method Details

    • recoverSessionData

      public final byte[] recoverSessionData(PublicKeyEncSessionPacket pkesk, InputStreamPacket encData) throws PGPException
      Description copied from interface: PublicKeyDataDecryptorFactory
      Recover the plain session info by decrypting the encrypted session key. The session info ALWAYS has the symmetric algorithm ID prefixed, so the return value is:
      [sym-alg][session-key][checksum]?
      Specified by:
      recoverSessionData in interface PublicKeyDataDecryptorFactory
      Parameters:
      pkesk - public-key encrypted session-key packet
      encData - encrypted data (sed/seipd/oed) packet
      Returns:
      decrypted session info
      Throws:
      PGPException
    • recoverSessionData

      public byte[] recoverSessionData(int keyAlgorithm, byte[][] secKeyData) throws PGPException
      Description copied from interface: PublicKeyDataDecryptorFactory
      Recover the plain session info by decrypting the encrypted session key. This method returns the decrypted session info as-is (without prefixing missing cipher algorithm), so the return value is:
      [sym-alg]?[session-key][checksum]?
      Specified by:
      recoverSessionData in interface PublicKeyDataDecryptorFactory
      Parameters:
      keyAlgorithm - public key algorithm
      secKeyData - encrypted session key data
      Returns:
      decrypted session info
      Throws:
      PGPException
    • prependSKAlgorithmToSessionData

      protected byte[] prependSKAlgorithmToSessionData(PublicKeyEncSessionPacket pkesk, InputStreamPacket encData, byte[] decryptedSessionData) throws PGPException
      Throws:
      PGPException
    • containsSKAlg

      protected boolean containsSKAlg(int pkeskVersion)
    • checkRange

      protected static void checkRange(int pLen, byte[] enc) throws PGPException
      Throws:
      PGPException
    • parseXDHEncSessionKey

      protected static byte[][] parseXDHEncSessionKey(byte[] enc, int pLen, boolean containsSKAlg) throws PGPException
      Parse the algorithm-specific encrypted-session-key field of an X25519 or X448 PKESK packet into the sender's ephemeral public key and the wrapped session key, applying all length checks. Shared so every decryptor factory applies exactly the same checks.
      Parameters:
      enc - the PKESK's encrypted session key data
      pLen - length in octets of the ephemeral public key (32 for X25519, 56 for X448)
      containsSKAlg - whether the packet version carries the symmetric-key algorithm octet (v3)
      Returns:
      a two-element array of the ephemeral public key and the wrapped session key
      Throws:
      PGPException - if the data is shorter than its declared lengths require
    • parseECDHEncSessionKey

      protected static byte[][] parseECDHEncSessionKey(byte[] enc) throws PGPException
      Parse the encrypted-session-key field of an ECDH (RFC 6637) PKESK packet into the sender's MPI-encoded ephemeral point and the wrapped session key, applying all length checks. Shared so every decryptor factory applies exactly the same checks.
      Parameters:
      enc - the PKESK's encrypted session key data
      Returns:
      a two-element array of the encoded ephemeral point and the wrapped session key
      Throws:
      PGPException - if the data is shorter than its declared lengths require