Class TlsUtils


  • public class TlsUtils
    extends java.lang.Object
    Some helper functions for the TLS API.
    • Field Detail

      • EMPTY_BYTES

        public static final byte[] EMPTY_BYTES
      • EMPTY_SHORTS

        public static final short[] EMPTY_SHORTS
      • EMPTY_INTS

        public static final int[] EMPTY_INTS
      • EMPTY_LONGS

        public static final long[] EMPTY_LONGS
      • MINIMUM_HASH_STRICT

        protected static short MINIMUM_HASH_STRICT
      • MINIMUM_HASH_PREFERRED

        protected static short MINIMUM_HASH_PREFERRED
    • Constructor Detail

      • TlsUtils

        public TlsUtils()
    • Method Detail

      • checkUint8

        public static void checkUint8​(short i)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint8

        public static void checkUint8​(int i)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint8

        public static void checkUint8​(long i)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint16

        public static void checkUint16​(int i)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint16

        public static void checkUint16​(long i)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint24

        public static void checkUint24​(int i)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint24

        public static void checkUint24​(long i)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint32

        public static void checkUint32​(long i)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint48

        public static void checkUint48​(long i)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUint64

        public static void checkUint64​(long i)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • isValidUint8

        public static boolean isValidUint8​(short i)
      • isValidUint8

        public static boolean isValidUint8​(int i)
      • isValidUint8

        public static boolean isValidUint8​(long i)
      • isValidUint16

        public static boolean isValidUint16​(int i)
      • isValidUint16

        public static boolean isValidUint16​(long i)
      • isValidUint24

        public static boolean isValidUint24​(int i)
      • isValidUint24

        public static boolean isValidUint24​(long i)
      • isValidUint32

        public static boolean isValidUint32​(long i)
      • isValidUint48

        public static boolean isValidUint48​(long i)
      • isValidUint64

        public static boolean isValidUint64​(long i)
      • isTLSv10

        public static boolean isTLSv10​(TlsContext context)
      • isTLSv11

        public static boolean isTLSv11​(TlsContext context)
      • isTLSv12

        public static boolean isTLSv12​(TlsContext context)
      • isTLSv13

        public static boolean isTLSv13​(TlsContext context)
      • writeUint8

        public static void writeUint8​(short i,
                                      java.io.OutputStream output)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint8

        public static void writeUint8​(int i,
                                      java.io.OutputStream output)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint8

        public static void writeUint8​(short i,
                                      byte[] buf,
                                      int offset)
      • writeUint8

        public static void writeUint8​(int i,
                                      byte[] buf,
                                      int offset)
      • writeUint16

        public static void writeUint16​(int i,
                                       java.io.OutputStream output)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint16

        public static void writeUint16​(int i,
                                       byte[] buf,
                                       int offset)
      • writeUint24

        public static void writeUint24​(int i,
                                       java.io.OutputStream output)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint24

        public static void writeUint24​(int i,
                                       byte[] buf,
                                       int offset)
      • writeUint32

        public static void writeUint32​(long i,
                                       java.io.OutputStream output)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint32

        public static void writeUint32​(long i,
                                       byte[] buf,
                                       int offset)
      • writeUint48

        public static void writeUint48​(long i,
                                       java.io.OutputStream output)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint48

        public static void writeUint48​(long i,
                                       byte[] buf,
                                       int offset)
      • writeUint64

        public static void writeUint64​(long i,
                                       java.io.OutputStream output)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint64

        public static void writeUint64​(long i,
                                       byte[] buf,
                                       int offset)
      • writeOpaque8

        public static void writeOpaque8​(byte[] buf,
                                        java.io.OutputStream output)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • writeOpaque8

        public static void writeOpaque8​(byte[] data,
                                        byte[] buf,
                                        int off)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • writeOpaque16

        public static void writeOpaque16​(byte[] buf,
                                         java.io.OutputStream output)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • writeOpaque24

        public static void writeOpaque24​(byte[] buf,
                                         java.io.OutputStream output)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint8Array

        public static void writeUint8Array​(short[] uints,
                                           java.io.OutputStream output)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint8Array

        public static void writeUint8Array​(short[] uints,
                                           byte[] buf,
                                           int offset)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint8ArrayWithUint8Length

        public static void writeUint8ArrayWithUint8Length​(short[] uints,
                                                          java.io.OutputStream output)
                                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint8ArrayWithUint8Length

        public static void writeUint8ArrayWithUint8Length​(short[] uints,
                                                          byte[] buf,
                                                          int offset)
                                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint16Array

        public static void writeUint16Array​(int[] uints,
                                            java.io.OutputStream output)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint16Array

        public static void writeUint16Array​(int[] uints,
                                            byte[] buf,
                                            int offset)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint16ArrayWithUint16Length

        public static void writeUint16ArrayWithUint16Length​(int[] uints,
                                                            java.io.OutputStream output)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUint16ArrayWithUint16Length

        public static void writeUint16ArrayWithUint16Length​(int[] uints,
                                                            byte[] buf,
                                                            int offset)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeOpaque8

        public static byte[] decodeOpaque8​(byte[] buf)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeOpaque8

        public static byte[] decodeOpaque8​(byte[] buf,
                                           int minLength)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeOpaque16

        public static byte[] decodeOpaque16​(byte[] buf)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeOpaque16

        public static byte[] decodeOpaque16​(byte[] buf,
                                            int minLength)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeUint8

        public static short decodeUint8​(byte[] buf)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeUint8ArrayWithUint8Length

        public static short[] decodeUint8ArrayWithUint8Length​(byte[] buf)
                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeUint16

        public static int decodeUint16​(byte[] buf)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeUint32

        public static long decodeUint32​(byte[] buf)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeOpaque8

        public static byte[] encodeOpaque8​(byte[] buf)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeOpaque16

        public static byte[] encodeOpaque16​(byte[] buf)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeUint8

        public static byte[] encodeUint8​(short uint)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeUint8ArrayWithUint8Length

        public static byte[] encodeUint8ArrayWithUint8Length​(short[] uints)
                                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeUint16

        public static byte[] encodeUint16​(int uint)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeUint16ArrayWithUint16Length

        public static byte[] encodeUint16ArrayWithUint16Length​(int[] uints)
                                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeUint32

        public static byte[] encodeUint32​(long uint)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeVersion

        public static byte[] encodeVersion​(ProtocolVersion version)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint8

        public static short readUint8​(java.io.InputStream input)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint8

        public static short readUint8​(byte[] buf,
                                      int offset)
      • readUint16

        public static int readUint16​(java.io.InputStream input)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint16

        public static int readUint16​(byte[] buf,
                                     int offset)
      • readUint24

        public static int readUint24​(java.io.InputStream input)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint24

        public static int readUint24​(byte[] buf,
                                     int offset)
      • readUint32

        public static long readUint32​(java.io.InputStream input)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint32

        public static long readUint32​(byte[] buf,
                                      int offset)
      • readUint48

        public static long readUint48​(java.io.InputStream input)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint48

        public static long readUint48​(byte[] buf,
                                      int offset)
      • readAllOrNothing

        public static byte[] readAllOrNothing​(int length,
                                              java.io.InputStream input)
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • readFully

        public static byte[] readFully​(int length,
                                       java.io.InputStream input)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • readFully

        public static void readFully​(byte[] buf,
                                     java.io.InputStream input)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readOpaque8

        public static byte[] readOpaque8​(java.io.InputStream input)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • readOpaque8

        public static byte[] readOpaque8​(java.io.InputStream input,
                                         int minLength)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • readOpaque8

        public static byte[] readOpaque8​(java.io.InputStream input,
                                         int minLength,
                                         int maxLength)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • readOpaque16

        public static byte[] readOpaque16​(java.io.InputStream input)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • readOpaque16

        public static byte[] readOpaque16​(java.io.InputStream input,
                                          int minLength)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • readOpaque24

        public static byte[] readOpaque24​(java.io.InputStream input)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • readOpaque24

        public static byte[] readOpaque24​(java.io.InputStream input,
                                          int minLength)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint8Array

        public static short[] readUint8Array​(int count,
                                             java.io.InputStream input)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • readUint16Array

        public static int[] readUint16Array​(int count,
                                            java.io.InputStream input)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readVersion

        public static ProtocolVersion readVersion​(byte[] buf,
                                                  int offset)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • readVersion

        public static ProtocolVersion readVersion​(java.io.InputStream input)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • readASN1Object

        public static org.bouncycastle.asn1.ASN1Primitive readASN1Object​(byte[] encoding)
                                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • readDERObject

        public static org.bouncycastle.asn1.ASN1Primitive readDERObject​(byte[] encoding)
                                                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • writeGMTUnixTime

        public static void writeGMTUnixTime​(byte[] buf,
                                            int offset)
      • writeVersion

        public static void writeVersion​(ProtocolVersion version,
                                        java.io.OutputStream output)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • writeVersion

        public static void writeVersion​(ProtocolVersion version,
                                        byte[] buf,
                                        int offset)
      • addIfSupported

        public static void addIfSupported​(java.util.Vector supportedGroups,
                                          TlsCrypto crypto,
                                          int namedGroup)
      • addIfSupported

        public static void addIfSupported​(java.util.Vector supportedGroups,
                                          TlsCrypto crypto,
                                          int[] namedGroups)
      • addToSet

        public static boolean addToSet​(java.util.Vector s,
                                       int i)
      • getDefaultDSSSignatureAlgorithms

        public static java.util.Vector getDefaultDSSSignatureAlgorithms()
      • getDefaultECDSASignatureAlgorithms

        public static java.util.Vector getDefaultECDSASignatureAlgorithms()
      • getDefaultRSASignatureAlgorithms

        public static java.util.Vector getDefaultRSASignatureAlgorithms()
      • getDefaultSignatureAlgorithm

        public static SignatureAndHashAlgorithm getDefaultSignatureAlgorithm​(short signatureAlgorithm)
      • getDefaultSignatureAlgorithms

        public static java.util.Vector getDefaultSignatureAlgorithms​(short signatureAlgorithm)
      • getDefaultSupportedSignatureAlgorithms

        public static java.util.Vector getDefaultSupportedSignatureAlgorithms​(TlsContext context)
      • getExtensionData

        public static byte[] getExtensionData​(java.util.Hashtable extensions,
                                              java.lang.Integer extensionType)
      • hasExpectedEmptyExtensionData

        public static boolean hasExpectedEmptyExtensionData​(java.util.Hashtable extensions,
                                                            java.lang.Integer extensionType,
                                                            short alertDescription)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • isSignatureAlgorithmsExtensionAllowed

        public static boolean isSignatureAlgorithmsExtensionAllowed​(ProtocolVersion version)
      • getLegacyClientCertType

        public static short getLegacyClientCertType​(short signatureAlgorithm)
      • getLegacySignatureAlgorithmClient

        public static short getLegacySignatureAlgorithmClient​(short clientCertificateType)
      • getLegacySignatureAlgorithmClientCert

        public static short getLegacySignatureAlgorithmClientCert​(short clientCertificateType)
      • getLegacySignatureAlgorithmServer

        public static short getLegacySignatureAlgorithmServer​(int keyExchangeAlgorithm)
      • encodeSupportedSignatureAlgorithms

        public static void encodeSupportedSignatureAlgorithms​(java.util.Vector supportedSignatureAlgorithms,
                                                              java.io.OutputStream output)
                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • parseSupportedSignatureAlgorithms

        public static java.util.Vector parseSupportedSignatureAlgorithms​(java.io.InputStream input)
                                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • verifySupportedSignatureAlgorithm

        public static void verifySupportedSignatureAlgorithm​(java.util.Vector supportedSignatureAlgorithms,
                                                             SignatureAndHashAlgorithm signatureAlgorithm)
                                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • containsSignatureAlgorithm

        public static boolean containsSignatureAlgorithm​(java.util.Vector supportedSignatureAlgorithms,
                                                         SignatureAndHashAlgorithm signatureAlgorithm)
                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • containsAnySignatureAlgorithm

        public static boolean containsAnySignatureAlgorithm​(java.util.Vector supportedSignatureAlgorithms,
                                                            short signatureAlgorithm)
      • copyOfRangeExact

        public static byte[] copyOfRangeExact​(byte[] original,
                                              int from,
                                              int to)
      • calculateExporterSeed

        public static byte[] calculateExporterSeed​(SecurityParameters securityParameters,
                                                   byte[] context_value)
      • getHashAlgorithmForHMACAlgorithm

        public static short getHashAlgorithmForHMACAlgorithm​(int macAlgorithm)
      • getHashAlgorithmForPRFAlgorithm

        public static short getHashAlgorithmForPRFAlgorithm​(int prfAlgorithm)
      • getOIDForHashAlgorithm

        public static org.bouncycastle.asn1.ASN1ObjectIdentifier getOIDForHashAlgorithm​(short hashAlgorithm)
      • hasSigningCapability

        public static boolean hasSigningCapability​(short clientCertificateType)
      • vectorOfOne

        public static java.util.Vector vectorOfOne​(java.lang.Object obj)
      • getCipherType

        public static int getCipherType​(int cipherSuite)
      • getEncryptionAlgorithm

        public static int getEncryptionAlgorithm​(int cipherSuite)
      • getEncryptionAlgorithmType

        public static int getEncryptionAlgorithmType​(int encryptionAlgorithm)
      • getKeyExchangeAlgorithm

        public static int getKeyExchangeAlgorithm​(int cipherSuite)
      • getKeyExchangeAlgorithms

        public static java.util.Vector getKeyExchangeAlgorithms​(int[] cipherSuites)
      • getMACAlgorithm

        public static int getMACAlgorithm​(int cipherSuite)
      • getMinimumVersion

        public static ProtocolVersion getMinimumVersion​(int cipherSuite)
      • getNamedGroupRoles

        public static java.util.Vector getNamedGroupRoles​(int[] cipherSuites)
      • getNamedGroupRoles

        public static java.util.Vector getNamedGroupRoles​(java.util.Vector keyExchangeAlgorithms)
      • isAEADCipherSuite

        public static boolean isAEADCipherSuite​(int cipherSuite)
                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • isBlockCipherSuite

        public static boolean isBlockCipherSuite​(int cipherSuite)
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • isStreamCipherSuite

        public static boolean isStreamCipherSuite​(int cipherSuite)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • isValidCipherSuiteForSignatureAlgorithms

        public static boolean isValidCipherSuiteForSignatureAlgorithms​(int cipherSuite,
                                                                       java.util.Vector sigAlgs)
      • isValidCipherSuiteForVersion

        public static boolean isValidCipherSuiteForVersion​(int cipherSuite,
                                                           ProtocolVersion serverVersion)
      • chooseSignatureAndHashAlgorithm

        public static SignatureAndHashAlgorithm chooseSignatureAndHashAlgorithm​(TlsContext context,
                                                                                java.util.Vector sigHashAlgs,
                                                                                short signatureAlgorithm)
                                                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • getUsableSignatureAlgorithms

        public static java.util.Vector getUsableSignatureAlgorithms​(java.util.Vector sigHashAlgs)
      • getCommonCipherSuites

        public static int[] getCommonCipherSuites​(int[] peerCipherSuites,
                                                  int[] localCipherSuites,
                                                  boolean useLocalOrder)
      • getSupportedCipherSuites

        public static int[] getSupportedCipherSuites​(TlsCrypto crypto,
                                                     int[] suites)
      • getSupportedCipherSuites

        public static int[] getSupportedCipherSuites​(TlsCrypto crypto,
                                                     int[] suites,
                                                     int suitesCount)
      • isSupportedCipherSuite

        public static boolean isSupportedCipherSuite​(TlsCrypto crypto,
                                                     int cipherSuite)
      • isSupportedKeyExchange

        public static boolean isSupportedKeyExchange​(TlsCrypto crypto,
                                                     int keyExchangeAlgorithm)
      • containsNonAscii

        public static boolean containsNonAscii​(byte[] bs)
      • containsNonAscii

        public static boolean containsNonAscii​(java.lang.String s)