Package org.conscrypt

Class DuckTypedHpkeSpi

  • All Implemented Interfaces:
    HpkeSpi

    @Internal
    public class DuckTypedHpkeSpi
    extends java.lang.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 Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.Object delegate  
      private java.util.Map<java.lang.String,​java.lang.reflect.Method> methods  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private DuckTypedHpkeSpi​(java.lang.Object delegate)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      byte[] engineExport​(int length, byte[] exporterContext)
      Exports secret key material from this SPI as described in RFC 9180.
      void engineInitRecipient​(byte[] encapsulated, java.security.PrivateKey key, byte[] info, java.security.PublicKey senderKey, byte[] psk, byte[] psk_id)
      Initialises an HPKE recipient SPI.
      void engineInitSender​(java.security.PublicKey recipientKey, byte[] info, java.security.PrivateKey senderKey, byte[] psk, byte[] pskId)
      Initialises an HPKE sender SPI.
      void engineInitSenderForTesting​(java.security.PublicKey recipientKey, byte[] info, java.security.PrivateKey senderKey, byte[] psk, byte[] pskId, byte[] sKe)
      Initialises an HPKE sender SPI.
      byte[] engineOpen​(byte[] ciphertext, byte[] aad)
      Opens a message, using the internal key schedule maintained by an HPKE recipient.
      byte[] engineSeal​(byte[] plaintext, byte[] aad)
      Seals a message, using the internal key schedule maintained by an HPKE sender.
      java.lang.Object getDelegate()  
      byte[] getEncapsulated()
      Returns the encapsulated key material for an HPKE sender.
      private java.lang.Object invoke​(java.lang.String methodName, java.lang.Object... args)  
      private java.lang.Object invokeNoChecked​(java.lang.String methodName, java.lang.Object... args)  
      private java.lang.Object invokeWithPossibleGeneralSecurity​(java.lang.String methodName, java.lang.Object... args)  
      private void invokeWithPossibleInvalidKey​(java.lang.String methodName, java.lang.Object... args)  
      static DuckTypedHpkeSpi newInstance​(java.lang.Object delegate)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • delegate

        private final java.lang.Object delegate
      • methods

        private final java.util.Map<java.lang.String,​java.lang.reflect.Method> methods
    • Constructor Detail

      • DuckTypedHpkeSpi

        private DuckTypedHpkeSpi​(java.lang.Object delegate)
                          throws java.lang.NoSuchMethodException
        Throws:
        java.lang.NoSuchMethodException
    • Method Detail

      • newInstance

        public static DuckTypedHpkeSpi newInstance​(java.lang.Object delegate)
      • invoke

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

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

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

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

        public java.lang.Object getDelegate()
      • engineInitSender

        public void engineInitSender​(java.security.PublicKey recipientKey,
                                     byte[] info,
                                     java.security.PrivateKey senderKey,
                                     byte[] psk,
                                     byte[] pskId)
                              throws java.security.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:
        java.security.InvalidKeyException - if recipientKey is null or an unsupported key format
      • engineInitSenderForTesting

        public void engineInitSenderForTesting​(java.security.PublicKey recipientKey,
                                               byte[] info,
                                               java.security.PrivateKey senderKey,
                                               byte[] psk,
                                               byte[] pskId,
                                               byte[] sKe)
                                        throws java.security.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:
        java.security.InvalidKeyException - if recipientKey is null or an unsupported key format or senderKey is an unsupported key format
      • engineInitRecipient

        public void engineInitRecipient​(byte[] encapsulated,
                                        java.security.PrivateKey key,
                                        byte[] info,
                                        java.security.PublicKey senderKey,
                                        byte[] psk,
                                        byte[] psk_id)
                                 throws java.security.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:
        java.security.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 java.security.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:
        java.security.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