Revision: 5cf0b9705060
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Tue Jun 3 18:06:45 2014 UTC
Log: - Supports DCDT-242.
- Implemented X509 certificate stringification that uses the SUN/JCA/JCE
cryptographic provider (prettier / better labled output).
http://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=5cf0b9705060
Modified:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CertificateUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/KeyUtils.java
/dcdt-web/src/main/webapp/static/scripts/hosting.js
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateConverter.java
Sat Apr 19 21:27:53 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateConverter.java
Tue Jun 3 18:06:45 2014 UTC
@@ -28,7 +28,8 @@
if (sourceType.isAssignableTo(TYPE_DESC_CERT)) {
X509Certificate sourceCert = ((X509Certificate) source);
- return (targetType.isAssignableTo(TYPE_DESC_BYTE_ARR) ?
CertificateUtils.writeCertificate(sourceCert, DataEncoding.PEM) :
sourceCert.toString());
+ return (targetType.isAssignableTo(TYPE_DESC_BYTE_ARR) ?
CertificateUtils.writeCertificate(sourceCert, DataEncoding.PEM) :
CertificateUtils
+ .certificateToString(sourceCert));
} else {
return CertificateUtils.readCertificate((byte[]) source,
CryptographyUtils.findTypeId(CertificateType.class,
targetType.getObjectType()),
DataEncoding.PEM);
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CertificateUtils.java
Mon May 5 05:22:45 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CertificateUtils.java
Tue Jun 3 18:06:45 2014 UTC
@@ -4,6 +4,7 @@
import gov.hhs.onc.dcdt.crypto.DataEncoding;
import gov.hhs.onc.dcdt.crypto.PemType;
import gov.hhs.onc.dcdt.crypto.certs.CertificateType;
+import
gov.hhs.onc.dcdt.crypto.utils.CryptographyUtils.ToolProviderJcaJceHelper;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -15,7 +16,6 @@
import java.io.Writer;
import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
@@ -35,31 +35,55 @@
public static BigInteger generateSerialNumber() throws
CryptographyException {
return
BigInteger.valueOf(SecureRandomUtils.getRandom(SERIAL_NUM_GEN_RAND_SEED_SIZE_DEFAULT).nextLong()).abs();
}
+
+ public static String certificateToString(X509Certificate cert) throws
CryptographyException {
+ try {
+ return readCertificate(CryptographyUtils.JCE_PROVIDER_HELPER,
cert.getEncoded(), CertificateType.X509, DataEncoding.DER).toString();
+ } catch (CertificateEncodingException e) {
+ throw new
gov.hhs.onc.dcdt.crypto.certs.CertificateException(String.format("Unable to
write certificate instance (class=%s) to string.",
+ ToolClassUtils.getClass(cert)), e);
+ }
+ }
public static X509Certificate readCertificate(InputStream inStream,
CertificateType certType, DataEncoding dataEnc) throws
CryptographyException {
- return readCertificate(new InputStreamReader(inStream), certType,
dataEnc);
+ return readCertificate(CryptographyUtils.PROVIDER_HELPER,
inStream, certType, dataEnc);
+ }
+
+ public static X509Certificate readCertificate(ToolProviderJcaJceHelper
provHelper, InputStream inStream, CertificateType certType, DataEncoding
dataEnc)
+ throws CryptographyException {
+ return readCertificate(provHelper, new
InputStreamReader(inStream), certType, dataEnc);
}
public static X509Certificate readCertificate(Reader reader,
CertificateType certType, DataEncoding dataEnc) throws
CryptographyException {
+ return readCertificate(CryptographyUtils.PROVIDER_HELPER, reader,
certType, dataEnc);
+ }
+
+ public static X509Certificate readCertificate(ToolProviderJcaJceHelper
provHelper, Reader reader, CertificateType certType, DataEncoding dataEnc)
+ throws CryptographyException {
try {
- return readCertificate(IOUtils.toByteArray(reader), certType,
dataEnc);
+ return readCertificate(provHelper,
IOUtils.toByteArray(reader), certType, dataEnc);
} catch (IOException e) {
throw new
gov.hhs.onc.dcdt.crypto.certs.CertificateException(String.format(
- "Unable to read certificate instance of type (id=%s,
providerName=%s) from reader (class=%s).", certType.getId(),
- CryptographyUtils.PROVIDER_NAME,
ToolClassUtils.getName(reader)), e);
+ "Unable to read certificate instance of type (id=%s,
providerName=%s) from reader (class=%s).", certType.getId(),
provHelper.getProvider()
+ .getName(), ToolClassUtils.getName(reader)), e);
}
}
public static X509Certificate readCertificate(byte[] data,
CertificateType certType, DataEncoding dataEnc) throws
CryptographyException {
+ return readCertificate(CryptographyUtils.PROVIDER_HELPER, data,
certType, dataEnc);
+ }
+
+ public static X509Certificate readCertificate(ToolProviderJcaJceHelper
provHelper, byte[] data, CertificateType certType, DataEncoding dataEnc)
+ throws CryptographyException {
try {
if (dataEnc == DataEncoding.PEM) {
data =
PemUtils.writePemContent(CryptographyUtils.findTypeId(PemType.class,
certType.getType()), data);
}
- return (X509Certificate)
getCertificateFactory(certType).generateCertificate(new
ByteArrayInputStream(data));
+ return ((X509Certificate) getCertificateFactory(provHelper,
certType).generateCertificate(new ByteArrayInputStream(data)));
} catch (CertificateException e) {
throw new
gov.hhs.onc.dcdt.crypto.certs.CertificateException(String.format(
- "Unable to read certificate instance of type (id=%s,
providerName=%s) from data.", certType.getId(),
CryptographyUtils.PROVIDER_NAME), e);
+ "Unable to read certificate instance of type (id=%s,
providerName=%s) from data.", certType.getId(),
provHelper.getProvider().getName()), e);
}
}
@@ -90,12 +114,16 @@
}
public static CertificateFactory getCertificateFactory(CertificateType
certType) throws CryptographyException {
+ return getCertificateFactory(CryptographyUtils.PROVIDER_HELPER,
certType);
+ }
+
+ public static CertificateFactory
getCertificateFactory(ToolProviderJcaJceHelper provHelper, CertificateType
certType) throws CryptographyException {
try {
- return
CryptographyUtils.PROVIDER_HELPER.createCertificateFactory(certType.getId());
- } catch (CertificateException | NoSuchAlgorithmException |
NoSuchProviderException e) {
- throw new gov.hhs.onc.dcdt.crypto.certs.CertificateException(
- String.format("Unable to get certificate factory instance
for certificate type (id=%s, providerName=%s).", certType.getId(),
- CryptographyUtils.PROVIDER_NAME), e);
+ return provHelper.createCertificateFactory(certType.getId());
+ } catch (CertificateException | NoSuchAlgorithmException e) {
+ throw new
gov.hhs.onc.dcdt.crypto.certs.CertificateException(String.format(
+ "Unable to get certificate factory instance for
certificate type (id=%s, providerName=%s).", certType.getId(),
provHelper.getProvider()
+ .getName()), e);
}
}
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
Sun May 4 20:51:50 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
Tue Jun 3 18:06:45 2014 UTC
@@ -14,16 +14,27 @@
import org.apache.commons.lang3.StringUtils;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
-import org.bouncycastle.jcajce.JcaJceHelper;
import org.bouncycastle.jcajce.ProviderJcaJceHelper;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public abstract class CryptographyUtils {
+ public static class ToolProviderJcaJceHelper extends
ProviderJcaJceHelper {
+ public ToolProviderJcaJceHelper(Provider prov) {
+ super(prov);
+ }
+
+ public Provider getProvider() {
+ return this.provider;
+ }
+ }
+
public final static Provider PROVIDER = new BouncyCastleProvider();
-
public final static String PROVIDER_NAME = PROVIDER.getName();
+ public final static ToolProviderJcaJceHelper PROVIDER_HELPER = new
ToolProviderJcaJceHelper(PROVIDER);
- public final static JcaJceHelper PROVIDER_HELPER = new
ProviderJcaJceHelper(PROVIDER);
+ public final static Provider JCE_PROVIDER =
Security.getProvider("SUN");
+ public final static String JCE_PROVIDER_NAME = JCE_PROVIDER.getName();
+ public final static ToolProviderJcaJceHelper JCE_PROVIDER_HELPER = new
ToolProviderJcaJceHelper(JCE_PROVIDER);
static {
initializeProvider();
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/KeyUtils.java
Sun May 4 20:51:50 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/KeyUtils.java
Tue Jun 3 18:06:45 2014 UTC
@@ -20,7 +20,6 @@
import java.security.KeyPairGenerator;
import java.security.KeyRep;
import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
import java.security.spec.EncodedKeySpec;
import java.security.spec.InvalidKeySpecException;
import org.apache.commons.io.IOUtils;
@@ -96,7 +95,7 @@
public static KeyPairGenerator getKeyPairGenerator(KeyAlgorithm
keyAlg) throws CryptographyException {
try {
return
CryptographyUtils.PROVIDER_HELPER.createKeyPairGenerator(keyAlg.getId());
- } catch (NoSuchAlgorithmException | NoSuchProviderException e) {
+ } catch (NoSuchAlgorithmException e) {
throw new KeyException(String.format("Unable to get key pair
generator for key algorithm (id=%s, providerName=%s).", keyAlg.getId(),
CryptographyUtils.PROVIDER_NAME), e);
}
@@ -105,7 +104,7 @@
public static KeyFactory getKeyFactory(KeyAlgorithm keyAlg) throws
CryptographyException {
try {
return
CryptographyUtils.PROVIDER_HELPER.createKeyFactory(keyAlg.getId());
- } catch (NoSuchAlgorithmException | NoSuchProviderException e) {
+ } catch (NoSuchAlgorithmException e) {
throw new KeyException(String.format("Unable to get key
factory for key algorithm (id=%s, providerName=%s).", keyAlg.getId(),
CryptographyUtils.PROVIDER_NAME), e);
}
=======================================
--- /dcdt-web/src/main/webapp/static/scripts/hosting.js Wed Apr 30 15:10:26
2014 UTC
+++ /dcdt-web/src/main/webapp/static/scripts/hosting.js Tue Jun 3 18:06:45
2014 UTC
@@ -38,13 +38,13 @@
testcaseHostingResultBodyElem.append($.fn.dcdt.testcases.buildTestcaseItem("Processing
Message(s)", testcaseHostingResult["procMsgs"]));
testcaseHostingResultBodyElem.append($.fn.dcdt.testcases.buildTestcaseSteps("Processed
Step(s)", testcaseHostingResult["procSteps"]));
testcaseHostingResultBodyElem.append($.fn.dcdt.testcases.buildTestcaseItem("Discovered
Valid Certificate", (testcaseHostingCert
- ?
$("<pre/>").enableClass("testcase-hosting-cert").text(testcaseHostingCert.replace(/
{4}/g, " ")) : null)));
+ ?
$("<pre/>").enableClass("testcase-hosting-cert").text(testcaseHostingCert) :
null)));
var testcaseHostingCertsInvalidBodyElem =
$("<span/>");
if (testcaseHostingCertsInvalid.length > 0) {
testcaseHostingCertsInvalid.forEach(function
(testcaseHostingCertInvalid) {
-
testcaseHostingCertsInvalidBodyElem.append($("<pre/>").enableClass("testcase-hosting-cert").text(testcaseHostingCertInvalid.replace(/
{4}/g, " ")))
+
testcaseHostingCertsInvalidBodyElem.append($("<pre/>").enableClass("testcase-hosting-cert").text(testcaseHostingCertInvalid))
});
} else {
testcaseHostingCertsInvalidBodyElem = null;