mirror of
https://github.com/nsacyber/HIRS.git
synced 2025-05-02 16:53:07 +00:00
Merge pull request #421 from nsacyber/issue-418
[#418] Change json parsing package
This commit is contained in:
commit
e07feb4be1
@ -6,7 +6,7 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile 'com.eclipsesource.minimal-json:minimal-json:0.9.5', 'com.beust:jcommander:1.72', 'org.bouncycastle:bcmail-jdk15on:1.59'
|
compile 'javax.json:javax.json-api:1.1.4', 'org.glassfish:javax.json:1.1.4', 'com.beust:jcommander:1.72', 'org.bouncycastle:bcmail-jdk15on:1.59'
|
||||||
testCompile 'org.testng:testng:6.8.8'
|
testCompile 'org.testng:testng:6.8.8'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package hirs.swid;
|
package hirs.swid;
|
||||||
|
|
||||||
import com.eclipsesource.json.Json;
|
|
||||||
import com.eclipsesource.json.JsonObject;
|
|
||||||
import com.eclipsesource.json.ParseException;
|
|
||||||
import hirs.swid.utils.HashSwid;
|
import hirs.swid.utils.HashSwid;
|
||||||
import hirs.swid.xjc.Directory;
|
import hirs.swid.xjc.Directory;
|
||||||
import hirs.swid.xjc.Entity;
|
import hirs.swid.xjc.Entity;
|
||||||
@ -13,6 +10,9 @@ import hirs.swid.xjc.SoftwareIdentity;
|
|||||||
import hirs.swid.xjc.SoftwareMeta;
|
import hirs.swid.xjc.SoftwareMeta;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
|
import javax.json.Json;
|
||||||
|
import javax.json.JsonObject;
|
||||||
|
import javax.json.JsonReader;
|
||||||
import javax.xml.bind.JAXBContext;
|
import javax.xml.bind.JAXBContext;
|
||||||
import javax.xml.bind.JAXBElement;
|
import javax.xml.bind.JAXBElement;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
@ -31,7 +31,6 @@ import javax.xml.crypto.dsig.dom.DOMSignContext;
|
|||||||
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
|
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
|
||||||
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
|
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
|
||||||
import javax.xml.crypto.dsig.keyinfo.KeyName;
|
import javax.xml.crypto.dsig.keyinfo.KeyName;
|
||||||
import javax.xml.crypto.dsig.keyinfo.KeyValue;
|
|
||||||
import javax.xml.crypto.dsig.keyinfo.X509Data;
|
import javax.xml.crypto.dsig.keyinfo.X509Data;
|
||||||
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
|
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
|
||||||
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
|
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
|
||||||
@ -46,20 +45,16 @@ import javax.xml.transform.TransformerException;
|
|||||||
import javax.xml.transform.TransformerFactory;
|
import javax.xml.transform.TransformerFactory;
|
||||||
import javax.xml.transform.dom.DOMSource;
|
import javax.xml.transform.dom.DOMSource;
|
||||||
import javax.xml.transform.stream.StreamResult;
|
import javax.xml.transform.stream.StreamResult;
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.security.InvalidAlgorithmParameterException;
|
import java.security.InvalidAlgorithmParameterException;
|
||||||
import java.security.KeyException;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.PrivateKey;
|
import java.security.PrivateKey;
|
||||||
import java.security.PublicKey;
|
|
||||||
import java.security.cert.CertificateException;
|
import java.security.cert.CertificateException;
|
||||||
import java.security.cert.X509Certificate;
|
import java.security.cert.X509Certificate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -68,11 +63,9 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides interaction with the SWID Tag schema as defined in
|
* This class provides interaction with the SWID Tag schema as defined in
|
||||||
* http://standards.iso.org/iso/19770/-2/2015/schema.xsd
|
* http://standards.iso.org/iso/19770/-2/2015/schema.xsd
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class SwidTagGateway {
|
public class SwidTagGateway {
|
||||||
|
|
||||||
@ -103,6 +96,7 @@ public class SwidTagGateway {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for String holding attributes file path
|
* Setter for String holding attributes file path
|
||||||
|
*
|
||||||
* @param attributesFile
|
* @param attributesFile
|
||||||
*/
|
*/
|
||||||
public void setAttributesFile(String attributesFile) {
|
public void setAttributesFile(String attributesFile) {
|
||||||
@ -111,6 +105,7 @@ public class SwidTagGateway {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for boolean governing signing credentials
|
* Setter for boolean governing signing credentials
|
||||||
|
*
|
||||||
* @param defaultCredentials
|
* @param defaultCredentials
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -120,12 +115,16 @@ public class SwidTagGateway {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for JKS keystore file
|
* Setter for JKS keystore file
|
||||||
|
*
|
||||||
* @param jksTruststoreFile
|
* @param jksTruststoreFile
|
||||||
*/
|
*/
|
||||||
public void setJksTruststoreFile(String jksTruststoreFile) { this.jksTruststoreFile = jksTruststoreFile; }
|
public void setJksTruststoreFile(String jksTruststoreFile) {
|
||||||
|
this.jksTruststoreFile = jksTruststoreFile;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for private key file in PEM format
|
* Setter for private key file in PEM format
|
||||||
|
*
|
||||||
* @param pemPrivateKeyFile
|
* @param pemPrivateKeyFile
|
||||||
*/
|
*/
|
||||||
public void setPemPrivateKeyFile(String pemPrivateKeyFile) {
|
public void setPemPrivateKeyFile(String pemPrivateKeyFile) {
|
||||||
@ -134,6 +133,7 @@ public class SwidTagGateway {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for certificate file in PEM format
|
* Setter for certificate file in PEM format
|
||||||
|
*
|
||||||
* @param pemCertificateFile
|
* @param pemCertificateFile
|
||||||
*/
|
*/
|
||||||
public void setPemCertificateFile(String pemCertificateFile) {
|
public void setPemCertificateFile(String pemCertificateFile) {
|
||||||
@ -142,6 +142,7 @@ public class SwidTagGateway {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for event log support RIM
|
* Setter for event log support RIM
|
||||||
|
*
|
||||||
* @param rimEventLog
|
* @param rimEventLog
|
||||||
*/
|
*/
|
||||||
public void setRimEventLog(String rimEventLog) {
|
public void setRimEventLog(String rimEventLog) {
|
||||||
@ -156,35 +157,37 @@ public class SwidTagGateway {
|
|||||||
public void generateSwidTag(final String filename) {
|
public void generateSwidTag(final String filename) {
|
||||||
SoftwareIdentity swidTag = null;
|
SoftwareIdentity swidTag = null;
|
||||||
try {
|
try {
|
||||||
BufferedReader jsonIn = Files.newBufferedReader(Paths.get(attributesFile), StandardCharsets.UTF_8);
|
InputStream is = new FileInputStream(attributesFile);
|
||||||
JsonObject configProperties = Json.parse(jsonIn).asObject();
|
JsonReader reader = Json.createReader(is);
|
||||||
|
JsonObject configProperties = reader.readObject();
|
||||||
|
reader.close();
|
||||||
//SoftwareIdentity
|
//SoftwareIdentity
|
||||||
swidTag = createSwidTag(configProperties.get(SwidTagConstants.SOFTWARE_IDENTITY).asObject());
|
swidTag = createSwidTag(configProperties.getJsonObject(SwidTagConstants.SOFTWARE_IDENTITY));
|
||||||
//Entity
|
//Entity
|
||||||
JAXBElement<Entity> entity = objectFactory.createSoftwareIdentityEntity(
|
JAXBElement<Entity> entity = objectFactory.createSoftwareIdentityEntity(
|
||||||
createEntity(configProperties.get(SwidTagConstants.ENTITY).asObject()));
|
createEntity(configProperties.getJsonObject(SwidTagConstants.ENTITY)));
|
||||||
swidTag.getEntityOrEvidenceOrLink().add(entity);
|
swidTag.getEntityOrEvidenceOrLink().add(entity);
|
||||||
//Link
|
//Link
|
||||||
JAXBElement<Link> link = objectFactory.createSoftwareIdentityLink(
|
JAXBElement<Link> link = objectFactory.createSoftwareIdentityLink(
|
||||||
createLink(configProperties.get(SwidTagConstants.LINK).asObject()));
|
createLink(configProperties.getJsonObject(SwidTagConstants.LINK)));
|
||||||
swidTag.getEntityOrEvidenceOrLink().add(link);
|
swidTag.getEntityOrEvidenceOrLink().add(link);
|
||||||
//Meta
|
//Meta
|
||||||
JAXBElement<SoftwareMeta> meta = objectFactory.createSoftwareIdentityMeta(
|
JAXBElement<SoftwareMeta> meta = objectFactory.createSoftwareIdentityMeta(
|
||||||
createSoftwareMeta(configProperties.get(SwidTagConstants.META).asObject()));
|
createSoftwareMeta(configProperties.getJsonObject(SwidTagConstants.META)));
|
||||||
swidTag.getEntityOrEvidenceOrLink().add(meta);
|
swidTag.getEntityOrEvidenceOrLink().add(meta);
|
||||||
//File
|
//File
|
||||||
hirs.swid.xjc.File file = createFile(
|
hirs.swid.xjc.File file = createFile(
|
||||||
configProperties.get(SwidTagConstants.PAYLOAD).asObject()
|
configProperties.getJsonObject(SwidTagConstants.PAYLOAD)
|
||||||
.get(SwidTagConstants.DIRECTORY).asObject()
|
.getJsonObject(SwidTagConstants.DIRECTORY)
|
||||||
.get(SwidTagConstants.FILE).asObject());
|
.getJsonObject(SwidTagConstants.FILE));
|
||||||
//Directory
|
//Directory
|
||||||
Directory directory = createDirectory(
|
Directory directory = createDirectory(
|
||||||
configProperties.get(SwidTagConstants.PAYLOAD).asObject()
|
configProperties.getJsonObject(SwidTagConstants.PAYLOAD)
|
||||||
.get(SwidTagConstants.DIRECTORY).asObject());
|
.getJsonObject(SwidTagConstants.DIRECTORY));
|
||||||
directory.getDirectoryOrFile().add(file);
|
directory.getDirectoryOrFile().add(file);
|
||||||
//Payload
|
//Payload
|
||||||
ResourceCollection payload = createPayload(
|
ResourceCollection payload = createPayload(
|
||||||
configProperties.get(SwidTagConstants.PAYLOAD).asObject());
|
configProperties.getJsonObject(SwidTagConstants.PAYLOAD));
|
||||||
payload.getDirectoryOrFileOrProcess().add(directory);
|
payload.getDirectoryOrFileOrProcess().add(directory);
|
||||||
JAXBElement<ResourceCollection> jaxbPayload =
|
JAXBElement<ResourceCollection> jaxbPayload =
|
||||||
objectFactory.createSoftwareIdentityPayload(payload);
|
objectFactory.createSoftwareIdentityPayload(payload);
|
||||||
@ -192,10 +195,6 @@ public class SwidTagGateway {
|
|||||||
|
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
System.out.println("File does not exist or cannot be read: " + e.getMessage());
|
System.out.println("File does not exist or cannot be read: " + e.getMessage());
|
||||||
} catch (IOException e) {
|
|
||||||
System.out.println("Error in file reader: " + e.getMessage());
|
|
||||||
} catch (ParseException e) {
|
|
||||||
System.out.println("Invalid JSON detected at " + e.getLocation().toString());
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
}
|
}
|
||||||
@ -229,7 +228,7 @@ public class SwidTagGateway {
|
|||||||
System.out.println("Error instantiating Transformer class: " + e.getMessage());
|
System.out.println("Error instantiating Transformer class: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method creates SoftwareIdentity element based on the parameters read in from
|
* This method creates SoftwareIdentity element based on the parameters read in from
|
||||||
* a properties file.
|
* a properties file.
|
||||||
@ -302,6 +301,7 @@ public class SwidTagGateway {
|
|||||||
/**
|
/**
|
||||||
* Thsi method creates a Link element based on the parameters read in from a properties
|
* Thsi method creates a Link element based on the parameters read in from a properties
|
||||||
* file.
|
* file.
|
||||||
|
*
|
||||||
* @param jsonObject the Properties object containing parameters from file
|
* @param jsonObject the Properties object containing parameters from file
|
||||||
* @return Link element created from the properties
|
* @return Link element created from the properties
|
||||||
*/
|
*/
|
||||||
@ -322,6 +322,7 @@ public class SwidTagGateway {
|
|||||||
/**
|
/**
|
||||||
* This method creates a Meta element based on the parameters read in from a properties
|
* This method creates a Meta element based on the parameters read in from a properties
|
||||||
* file.
|
* file.
|
||||||
|
*
|
||||||
* @param jsonObject the Properties object containing parameters from file
|
* @param jsonObject the Properties object containing parameters from file
|
||||||
* @return the Meta element created from the properties
|
* @return the Meta element created from the properties
|
||||||
*/
|
*/
|
||||||
@ -403,6 +404,7 @@ public class SwidTagGateway {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This utility method checks if an attribute value is empty before adding it to the map.
|
* This utility method checks if an attribute value is empty before adding it to the map.
|
||||||
|
*
|
||||||
* @param attributes
|
* @param attributes
|
||||||
* @param key
|
* @param key
|
||||||
* @param value
|
* @param value
|
||||||
@ -465,7 +467,7 @@ public class SwidTagGateway {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.out.println("Error loading keystore: " + e.getMessage());
|
System.out.println("Error loading keystore: " + e.getMessage());
|
||||||
} catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException |
|
} catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException |
|
||||||
ParserConfigurationException e) {
|
ParserConfigurationException e) {
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
} catch (CertificateException e) {
|
} catch (CertificateException e) {
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user