Class DuckTypedHpkeSpi

java.lang.Object
org.conscrypt.DuckTypedHpkeSpi
All Implemented Interfaces:
HpkeSpi

@Internal public class DuckTypedHpkeSpi extends Object implements HpkeSpi
Duck typed implementation of HpkeSpi.

Will wrap any Object which implements all of the methods in HpkeSpi and delegate to them by reflection.

  • Field Details

  • Constructor Details

  • Method Details

    • newInstance

      public static DuckTypedHpkeSpi newInstance(Object delegate)
    • invoke

      private Object invoke(String methodName, Object... args) throws InvocationTargetException
      Throws:
      InvocationTargetException
    • invokeWithPossibleInvalidKey

      private void invokeWithPossibleInvalidKey(String methodName, Object... args) throws InvalidKeyException
      Throws:
      InvalidKeyException
    • invokeWithPossibleGeneralSecurity

      private Object invokeWithPossibleGeneralSecurity(String methodName, Object... args) throws GeneralSecurityException
      Throws:
      GeneralSecurityException
    • invokeNoChecked

      private Object invokeNoChecked(String methodName, Object... args)
    • getDelegate

      public Object getDelegate()
    • engineInitSender

      public void engineInitSender(PublicKey recipientKey, byte[] info, PrivateKey senderKey, byte[] psk, byte[] pskId) throws InvalidKeyException
      Description copied from interface: HpkeSpi
      Initialises an HPKE sender SPI.
      Specified by:
      engineInitSender in interface HpkeSpi
      Parameters:
      recipientKey - public key of the recipient
      info - application-supplied information, may be null or empty
      senderKey - private key of the sender, for symmetric auth modes only, else null
      psk - pre-shared key, for PSK auth modes only, else null
      pskId - pre-shared key ID, for PSK auth modes only, else null
      Throws:
      InvalidKeyException - if recipientKey is null or an unsupported key format
    • engineInitSenderForTesting

      public void engineInitSenderForTesting(PublicKey recipientKey, byte[] info, PrivateKey senderKey, byte[] psk, byte[] pskId, byte[] sKe) throws InvalidKeyException
      Description copied from interface: HpkeSpi
      Initialises an HPKE sender SPI.
      Specified by:
      engineInitSenderForTesting in interface HpkeSpi
      Parameters:
      recipientKey - public key of the recipient
      info - application-supplied information, may be null or empty
      senderKey - private key of the sender, for symmetric auth modes only, else null
      psk - pre-shared key, for PSK auth modes only, else null
      pskId - pre-shared key ID, for PSK auth modes only, else null
      sKe - optional random seed, should be null for all uses except for validation against known test vectors
      Throws:
      InvalidKeyException - if recipientKey is null or an unsupported key format or senderKey is an unsupported key format
    • engineInitRecipient

      public void engineInitRecipient(byte[] encapsulated, PrivateKey key, byte[] info, PublicKey senderKey, byte[] psk, byte[] psk_id) throws InvalidKeyException
      Description copied from interface: HpkeSpi
      Initialises an HPKE recipient SPI.
      Specified by:
      engineInitRecipient in interface HpkeSpi
      Parameters:
      encapsulated - encapsulated ephemeral key from a sender
      key - private key of the recipient
      info - application-supplied information, may be null or empty
      senderKey - public key of sender, for asymmetric auth modes only, else null
      psk - pre-shared key, for PSK auth modes only, else null
      psk_id - pre-shared key ID, for PSK auth modes only, else null
      Throws:
      InvalidKeyException - if recipientKey is null or an unsupported key format or senderKey is an unsupported key format
    • engineSeal

      public byte[] engineSeal(byte[] plaintext, byte[] aad)
      Description copied from interface: HpkeSpi
      Seals a message, using the internal key schedule maintained by an HPKE sender.
      Specified by:
      engineSeal in interface HpkeSpi
      Parameters:
      plaintext - the plaintext
      aad - optional associated data, may be null or empty
      Returns:
      the ciphertext
    • engineExport

      public byte[] engineExport(int length, byte[] exporterContext)
      Description copied from interface: HpkeSpi
      Exports secret key material from this SPI as described in RFC 9180.
      Specified by:
      engineExport in interface HpkeSpi
      Parameters:
      length - expected output length
      exporterContext - optional context string, may be null or empty
      Returns:
      exported value
    • engineOpen

      public byte[] engineOpen(byte[] ciphertext, byte[] aad) throws GeneralSecurityException
      Description copied from interface: HpkeSpi
      Opens a message, using the internal key schedule maintained by an HPKE recipient.
      Specified by:
      engineOpen in interface HpkeSpi
      Parameters:
      ciphertext - the ciphertext
      aad - optional associated data, may be null or empty
      Returns:
      the plaintext
      Throws:
      GeneralSecurityException - on decryption failures
    • getEncapsulated

      public byte[] getEncapsulated()
      Description copied from interface: HpkeSpi
      Returns the encapsulated key material for an HPKE sender.
      Specified by:
      getEncapsulated in interface HpkeSpi
      Returns:
      the key material