Class DSSUtils


  • public final class DSSUtils
    extends Object
    • Field Detail

      • EMPTY_BYTE_ARRAY

        public static final byte[] EMPTY_BYTE_ARRAY
      • DEFAULT_DATE_FORMAT

        public static final String DEFAULT_DATE_FORMAT
        The default date pattern: "yyyy-MM-dd"
        See Also:
        Constant Field Values
    • Method Detail

      • formatInternal

        public static String formatInternal​(Date date)
        Formats a date to use for internal purposes (logging, toString)
        Parameters:
        date - the date to be converted
        Returns:
        the textual representation (a null date will result in "N/A")
      • formatDateWithCustomFormat

        public static String formatDateWithCustomFormat​(Date date,
                                                        String format)
      • toHex

        public static String toHex​(byte[] value)
        Converts an array of bytes into a String representing the hexadecimal values of each byte in order. The returned String will be double the length of the passed array, as it takes two characters to represent any given byte. If the input array is null then null is returned. The obtained string is converted to uppercase.
        Parameters:
        value - the value to be converted to hexadecimal
        Returns:
        the hexadecimal String
      • convertToPEM

        public static String convertToPEM​(CertificateToken cert)
        This method converts the given certificate into its PEM string.
        Parameters:
        cert - the token to be converted to PEM
        Returns:
        PEM encoded certificate
      • isStartWithASN1SequenceTag

        public static boolean isStartWithASN1SequenceTag​(InputStream is)
        This method returns true if the inputStream starts with an ASN.1 Sequence
        Parameters:
        is - the inputstream to be tested
        Returns:
        true if DER encoded
      • convertToDER

        public static byte[] convertToDER​(String pemContent)
        This method converts a PEM encoded certificate/crl/... to DER encoded
        Parameters:
        pemContent - the String which contains the PEM encoded object
        Returns:
        the binaries of the DER encoded object
      • loadCertificate

        public static CertificateToken loadCertificate​(String path)
        This method loads a certificate from the given resource. The certificate must be DER-encoded and may be supplied in binary or printable (PEM / Base64) encoding. If the certificate is provided in Base64 encoding, it must be bounded at the beginning by -----BEGIN CERTIFICATE-----, and must be bounded at the end by -----END CERTIFICATE-----.
        Parameters:
        path - resource location.
        Returns:
        the certificate token
      • loadCertificate

        public static CertificateToken loadCertificate​(File file)
        This method loads a certificate from the given location. The certificate must be DER-encoded and may be supplied in binary or printable (PEM / Base64) encoding. If the certificate is provided in Base64 encoding, it must be bounded at the beginning by -----BEGIN CERTIFICATE-----, and must be bounded at the end by -----END CERTIFICATE-----.
        Parameters:
        file - the file with the certificate
        Returns:
        the certificate token
      • loadCertificate

        public static CertificateToken loadCertificate​(InputStream inputStream)
        This method loads a certificate from the given location. The certificate must be DER-encoded and may be supplied in binary or printable (PEM / Base64) encoding. If the certificate is provided in Base64 encoding, it must be bounded at the beginning by -----BEGIN CERTIFICATE-----, and must be bounded at the end by -----END CERTIFICATE-----.
        Parameters:
        inputStream - input stream containing the certificate
        Returns:
        the certificate token
      • loadCertificate

        public static CertificateToken loadCertificate​(byte[] input)
        This method loads a certificate from the byte array. The certificate must be DER-encoded and may be supplied in binary or printable (Base64) encoding. If the certificate is provided in Base64 encoding, it must be bounded at the beginning by -----BEGIN CERTIFICATE-----, and must be bounded at the end by -----END CERTIFICATE-----. It throws an DSSException or return null when the certificate cannot be loaded.
        Parameters:
        input - array of bytes containing the certificate
        Returns:
        the certificate token
      • loadCertificateFromBase64EncodedString

        public static CertificateToken loadCertificateFromBase64EncodedString​(String base64Encoded)
        This method loads a certificate from a base 64 encoded String
        Parameters:
        base64Encoded - the base64 encoded certificate
        Returns:
        the certificate token
      • loadPotentialIssuerCertificates

        public static Collection<CertificateToken> loadPotentialIssuerCertificates​(CertificateToken cert,
                                                                                   DataLoader loader)
        This method loads the potential issuer certificate(s) from the given locations (AIA).
        Parameters:
        cert - certificate for which the issuer(s) should be loaded
        loader - the data loader to use
        Returns:
        a list of potential issuers
      • getSHA1Digest

        public static String getSHA1Digest​(String stringToDigest)
        This method digests the given string with SHA1 algorithm and encode returned array of bytes as hex string.
        Parameters:
        stringToDigest - Everything in the name
        Returns:
        hex encoded digest value
      • digest

        public static byte[] digest​(DigestAlgorithm digestAlgorithm,
                                    byte[] data)
        This method allows to digest the data with the given algorithm.
        Parameters:
        digestAlgorithm - the algorithm to use
        data - the data to digest
        Returns:
        digested array of bytes
      • encodeRSADigest

        public static byte[] encodeRSADigest​(DigestAlgorithm digestAlgorithm,
                                             byte[] digest)
        This method wraps the digest value in a DigestInfo (combination of digest algorithm and value). This encapsulation is required to operate NONEwithRSA signatures.
        Parameters:
        digestAlgorithm - the used digest algorithm
        digest - the digest value
        Returns:
        DER encoded binaries of the related digest info
      • digest

        public static byte[] digest​(DigestAlgorithm digestAlgo,
                                    InputStream inputStream)
        This method allows to digest the data in the InputStream with the given algorithm.
        Parameters:
        digestAlgo - the algorithm to use
        inputStream - the data to digest
        Returns:
        digested array of bytes
      • digest

        public static byte[] digest​(DigestAlgorithm digestAlgorithm,
                                    byte[]... data)
      • toInputStream

        public static InputStream toInputStream​(File file)
        This method returns an InputStream which needs to be closed, based on FileInputStream.
        Parameters:
        file - File to read.
        Returns:
        an InputStream materialized by a FileInputStream representing the contents of the file @ if an I/O error occurred
      • toByteArrayInputStream

        public static InputStream toByteArrayInputStream​(File file)
        This method returns an InputStream which does not need to be closed, based on ByteArrayInputStream.
        Parameters:
        file - File to read
        Returns:
        InputStream based on ByteArrayInputStream
      • toByteArray

        public static byte[] toByteArray​(File file)
        FROM: Apache Reads the contents of a file into a byte array. The file is always closed.
        Parameters:
        file - the file to read, must not be null
        Returns:
        the file contents, never null
      • splitDocument

        public static DSSDocument splitDocument​(DSSDocument origin,
                                                int start,
                                                int end)
        This method create a new document from a sub-part of another document
        Parameters:
        origin - the original document
        start - the start position to retrieve
        end - the end position to retrieve
        Returns:
        a new DSSDocument
      • toByteArray

        public static byte[] toByteArray​(DSSDocument document)
        Get the contents of an DSSDocument as a byte[].
        Parameters:
        document - the document to read
        Returns:
        the content as byte array
      • toByteArray

        public static byte[] toByteArray​(InputStream inputStream)
        Get the contents of an InputStream as a byte[].
        Parameters:
        inputStream - the inputstream to read
        Returns:
        the content of the inputstream as byte array
      • toCMSSignedData

        public static org.bouncycastle.cms.CMSSignedData toCMSSignedData​(DSSDocument document)
        Gets CMSSignedData from the document bytes
        Parameters:
        document - DSSDocument contained CMSSignedData
        Returns:
        CMSSignedData
      • getFileByteSize

        public static long getFileByteSize​(DSSDocument dssDocument)
        Returns byte size of the given document
        Parameters:
        dssDocument - DSSDocument to get size for
        Returns:
        long size of the given document
      • saveToFile

        public static void saveToFile​(byte[] bytes,
                                      File file)
        This method saves the given array of byte to the provided File.
        Parameters:
        bytes - the binary to save
        file - the file where to store
      • getDeterministicId

        public static String getDeterministicId​(Date signingTime,
                                                TokenIdentifier id)
        Return a unique id for a date and the certificateToken id.
        Parameters:
        signingTime - the signing time
        id - the token identifier
        Returns:
        a unique string
      • getMD5Digest

        public static String getMD5Digest​(byte[] bytes)
        Returns a Hex encoded of the MD5 digest of binaries
        Parameters:
        bytes - the bytes to be digested
        Returns:
        the hex encoded MD5 digest
      • getX500PrincipalOrNull

        public static X500Principal getX500PrincipalOrNull​(String x500PrincipalString)
        This method returns the X500Principal corresponding to the given string or null if the conversion is not possible.
        Parameters:
        x500PrincipalString - a String representation of the X500Principal
        Returns:
        X500Principal or null
      • x500PrincipalAreEquals

        public static boolean x500PrincipalAreEquals​(X500Principal firstX500Principal,
                                                     X500Principal secondX500Principal)
        This method compares two X500Principals. X500Principal.CANONICAL and X500Principal.RFC2253 forms are compared.
        Parameters:
        firstX500Principal - the first X500Principal object to be compared
        secondX500Principal - the second X500Principal object to be compared
        Returns:
        true if the two parameters contain the same key/values
      • getNormalizedX500Principal

        public static X500Principal getNormalizedX500Principal​(X500Principal x500Principal)
        This method normalizes the X500Principal object
        Parameters:
        x500Principal - to be normalized
        Returns:
        X500Principal normalized
      • getUtcDate

        public static Date getUtcDate​(int year,
                                      int month,
                                      int day)
        This method returns an UTC date base on the year, the month and the day. The year must be encoded as 1978... and not 78
        Parameters:
        year - the value used to set the YEAR calendar field.
        month - the month. Month value is 0-based. e.g., 0 for January.
        day - the value used to set the DAY_OF_MONTH calendar field.
        Returns:
        the UTC date base on parameters
      • printSecurityProviders

        public static void printSecurityProviders()
        This method lists all defined security providers.
      • readFirstByte

        public static byte readFirstByte​(DSSDocument dssDocument)
        Reads the first byte from the DSSDocument
        Parameters:
        dssDocument - the document
        Returns:
        the first byte
      • compareFirstBytes

        public static boolean compareFirstBytes​(DSSDocument dssDocument,
                                                byte[] byteArray)
        Reads first byteArray.length bytes of the dssDocument and compares them with byteArray
        Parameters:
        dssDocument - DSSDocument to read bytes from
        byteArray - byte array to compare the beginning string with
        Returns:
        TRUE if the document starts from byteArray, FALSE otherwise
      • concatenate

        public static byte[] concatenate​(byte[]... arrays)
        Concatenates all the arrays into a new array. The new array contains all of the element of each array followed by all of the elements of the next array. When an array is returned, it is always a new array.
        Parameters:
        arrays - byte arrays to concatenate
        Returns:
        the new byte array
      • decodeUrl

        public static String decodeUrl​(String uri)
      • skipAvailableBytes

        public static long skipAvailableBytes​(InputStream is,
                                              long n)
                                       throws IllegalStateException
        Skip the defined n number of bytes from the InputStream and validates success of the operation
        Parameters:
        is - InputStream to skip bytes from
        n - long number bytes to skip
        Returns:
        actual number of bytes have been skipped
        Throws:
        IllegalStateException - in case of InputStream reading error
      • readAvailableBytes

        public static long readAvailableBytes​(DSSDocument dssDocument,
                                              byte[] b)
                                       throws IllegalStateException
        Read the requested number of bytes from DSSDocument according to the size of the provided byte[] buffer and validates success of the operation
        Parameters:
        dssDocument - DSSDocument to read bytes from
        b - byte[] buffer to fill
        Returns:
        the total number of bytes read into buffer
        Throws:
        IllegalStateException - in case of InputStream reading error
      • readAvailableBytes

        public static long readAvailableBytes​(InputStream is,
                                              byte[] b)
                                       throws IllegalStateException
        Read the requested number of bytes from InputStream according to the size of the provided byte[] buffer and validates success of the operation
        Parameters:
        is - InputStream to read bytes from
        b - byte[] buffer to fill
        Returns:
        the total number of bytes read into buffer
        Throws:
        IllegalStateException - in case of InputStream reading error
      • readAvailableBytes

        public static long readAvailableBytes​(InputStream is,
                                              byte[] b,
                                              int off,
                                              int len)
                                       throws IllegalStateException
        Read the requested number of bytes from InputStream and validates success of the operation
        Parameters:
        is - InputStream to read bytes from
        b - byte[] buffer to fill
        off - int offset in the destination array
        len - int number of bytes to read
        Returns:
        the total number of bytes read into buffer
        Throws:
        IllegalStateException - in case of InputStream reading error