Search in sources :

Example 1 with EncryptionType

use of org.kse.crypto.privatekey.EncryptionType in project keystore-explorer by kaikramer.

the class CryptoFileUtil method detectFileType.

/**
 * Detect the cryptographic file type of the supplied input stream.
 *
 * @param is
 *            Input stream to detect type for
 * @return Type or null if file not of a recognised type
 * @throws IOException
 *             If an I/O problem occurred
 */
public static CryptoFileType detectFileType(InputStream is) throws IOException {
    byte[] contents = ReadUtil.readFully(is);
    EncryptionType pkcs8EncType = Pkcs8Util.getEncryptionType(new ByteArrayInputStream(contents));
    if (pkcs8EncType != null) {
        if (pkcs8EncType == ENCRYPTED) {
            return ENC_PKCS8_PVK;
        } else if (pkcs8EncType == UNENCRYPTED) {
            return UNENC_PKCS8_PVK;
        }
    }
    EncryptionType msPvkEncType = MsPvkUtil.getEncryptionType(new ByteArrayInputStream(contents));
    if (msPvkEncType != null) {
        if (msPvkEncType == ENCRYPTED) {
            return ENC_MS_PVK;
        } else if (msPvkEncType == UNENCRYPTED) {
            return UNENC_MS_PVK;
        }
    }
    EncryptionType openSslPvkEncType = OpenSslPvkUtil.getEncryptionType(new ByteArrayInputStream(contents));
    if (openSslPvkEncType != null) {
        if (openSslPvkEncType == ENCRYPTED) {
            return ENC_OPENSSL_PVK;
        } else if (openSslPvkEncType == UNENCRYPTED) {
            return UNENC_OPENSSL_PVK;
        }
    }
    try {
        OpenSslPubUtil.load(new ByteArrayInputStream(contents));
        return OPENSSL_PUB;
    } catch (Exception ex) {
    // Ignore - not an OpenSSL public key file
    } catch (OutOfMemoryError ex) {
    // Ignore - not an OpenSSL public key file, some files cause the
    // heap space to fill up with the load call
    }
    try {
        if (X509CertUtil.loadCertificates(new ByteArrayInputStream(contents)).length > 0) {
            return CERT;
        }
    } catch (Exception ex) {
    // Ignore - not a certificate file
    }
    try {
        X509CertUtil.loadCRL(new ByteArrayInputStream(contents));
        return CRL;
    } catch (Exception ex) {
    // Ignore - not a CRL file
    }
    CsrType csrType = detectCsrType(contents);
    if (csrType != null) {
        return csrType.getCryptoFileType();
    }
    KeyStoreType keyStoreType = detectKeyStoreType(new ByteArrayInputStream(contents));
    if (keyStoreType != null) {
        return keyStoreType.getCryptoFileType();
    }
    // Not a recognised type
    return UNKNOWN;
}
Also used : EncryptionType(org.kse.crypto.privatekey.EncryptionType) CsrType(org.kse.crypto.csr.CsrType) KeyStoreType(org.kse.crypto.keystore.KeyStoreType) ByteArrayInputStream(java.io.ByteArrayInputStream) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) SpkacException(org.kse.crypto.csr.spkac.SpkacException)

Aggregations

ByteArrayInputStream (java.io.ByteArrayInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 CsrType (org.kse.crypto.csr.CsrType)1 SpkacException (org.kse.crypto.csr.spkac.SpkacException)1 KeyStoreType (org.kse.crypto.keystore.KeyStoreType)1 EncryptionType (org.kse.crypto.privatekey.EncryptionType)1