diff --git a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiDevicePath.java b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiDevicePath.java
index 1a13e0aa..57574e57 100644
--- a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiDevicePath.java
+++ b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiDevicePath.java
@@ -1,6 +1,5 @@
package hirs.tpm.eventlog.uefi;
-
import java.io.UnsupportedEncodingException;
import hirs.utils.HexUtils;
@@ -63,7 +62,7 @@ public class UefiDevicePath {
* @return uefi sub-type
*/
public String getSubType() {
- return subType;
+ return subType.trim();
}
/**
@@ -124,41 +123,42 @@ public class UefiDevicePath {
String devInfo = " ";
int devPath = path[offset];
switch (path[0 + offset]) {
- case UefiConstants.DEV_HW: devInfo += "Hardware Device Path: ";
+ case UefiConstants.DEV_HW: type = "Hardware Device Path";
if (devPath == UefiConstants.DEVPATH_HARWARE) {
- devInfo += pciSubType(path, offset);
+ devInfo += type + ": " + pciSubType(path, offset);
}
break;
- case UefiConstants.DEV_ACPI: devInfo += "ACPI Device Path: ";
- devInfo += acpiSubType(path, offset);
+ case UefiConstants.DEV_ACPI: type = "ACPI Device Path";
+ devInfo += type + ": " + acpiSubType(path, offset);
break;
- case UefiConstants.DEV_MSG: devInfo += "Messaging Device Path:";
+ case UefiConstants.DEV_MSG: type = "Messaging Device Path";
if (path[offset + UefiConstants.OFFSET_1] == UefiConstants.DEV_SUB_SATA) {
- devInfo += sataSubType(path, offset);
+ devInfo += type + ": " + sataSubType(path, offset);
}
if (path[offset + UefiConstants.OFFSET_1] == UefiConstants.DEV_SUB_NVM) {
- devInfo += nvmSubType(path, offset);
+ devInfo += type + ": " + nvmSubType(path, offset);
}
break;
- case UefiConstants.DEV_MEDIA: devInfo += "Media Device Path: ";
+ case UefiConstants.DEV_MEDIA: type = "Media Device Path";
if (path[offset + UefiConstants.OFFSET_1] == 0x01) {
- devInfo += hardDriveSubType(path, offset);
+ devInfo += type + ": " + hardDriveSubType(path, offset);
} else if (path[offset + UefiConstants.OFFSET_1] == UefiConstants.DEVPATH_VENDOR) {
- devInfo += vendorSubType(path, offset);
+ devInfo += type + ": " + vendorSubType(path, offset);
} else if (path[offset + UefiConstants.OFFSET_1] == UefiConstants.DEVPATH_FILE) {
- devInfo += filePathSubType(path, offset);
+ devInfo += type + ": " + filePathSubType(path, offset);
} else if (path[offset + UefiConstants.OFFSET_1] == UefiConstants.DEVPATH_PWIG_FILE) {
- devInfo += piwgFirmVolFile(path, offset);
+ devInfo += type + ": " + piwgFirmVolFile(path, offset);
} else if (path[offset + UefiConstants.OFFSET_1] == UefiConstants.DEVPATH_PWIG_VOL) {
- devInfo += piwgFirmVolPath(path, offset);
+ devInfo += type + ": " + piwgFirmVolPath(path, offset);
}
break;
- case UefiConstants.DEV_BIOS: devInfo += "BIOS Device Path: ";
- devInfo += biosDevicePath(path, offset);
+ case UefiConstants.DEV_BIOS: type = "BIOS Device Path";
+ devInfo += type + ": " + biosDevicePath(path, offset);
break;
- case UefiConstants.TERMINATOR: devInfo += "End of Hardware Device Path: ";
+ case UefiConstants.TERMINATOR: devInfo += "End of Hardware Device Path";
break;
- default: devInfo = " Unknown Device Path";
+ default: type = "Unknown Device Path";
+ devInfo = type;
}
devInfo += "\n";
return devInfo;
@@ -176,9 +176,10 @@ private String acpiSubType(final byte[] path, final int offset) {
case 0x01: tmpType = "(Short): ";
tmpType += acpiShortSubType(path, offset);
break;
- case 0x02: tmpType = "Expanded ACPI Device Path"; break;
+ case 0x02: tmpType = "Expanded ACPI Device Path"; break;
default: tmpType = "Invalid ACPI Device Path sub type";
}
+ subType = tmpType;
return tmpType;
}
@@ -195,6 +196,7 @@ private String acpiShortSubType(final byte[] path, final int offset) {
tmpType += "_HID = " + HexUtils.byteArrayToHexString(hid);
System.arraycopy(path, 2 * UefiConstants.SIZE_4 + offset, hid, 0, UefiConstants.SIZE_4);
tmpType += "_UID = " + HexUtils.byteArrayToHexString(hid);
+ subType = tmpType;
return tmpType;
}
@@ -209,6 +211,7 @@ private String pciSubType(final byte[] path, final int offset) {
tmpType += String.format("0x%x", path[offset + UefiConstants.SIZE_4]);
tmpType += " PCI Device Number = ";
tmpType += String.format("0x%x", path[offset + UefiConstants.SIZE_5]);
+ subType = tmpType;
return tmpType;
}
@@ -227,6 +230,7 @@ private String sataSubType(final byte[] path, final int offset) {
tmpType += " Port Multiplier = " + HexUtils.byteArrayToHexString(data);
System.arraycopy(path, UefiConstants.OFFSET_8 + offset, data, 0, UefiConstants.SIZE_2);
tmpType += " Logical Unit Number = " + HexUtils.byteArrayToHexString(data);
+ subType = tmpType;
return tmpType;
}
@@ -237,18 +241,18 @@ private String sataSubType(final byte[] path, final int offset) {
* @return hard drive info.
*/
private String hardDriveSubType(final byte[] path, final int offset) {
- String tmpType = " Partition Number = ";
+ String tmpType = "Partition Number = ";
byte[] partnumber = new byte[UefiConstants.SIZE_4];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, partnumber, 0, UefiConstants.SIZE_4);
tmpType += HexUtils.byteArrayToHexString(partnumber);
byte[] data = new byte[UefiConstants.SIZE_8];
System.arraycopy(path, UefiConstants.OFFSET_8 + offset, data, 0, UefiConstants.SIZE_8);
- tmpType += " Partition Start = " + HexUtils.byteArrayToHexString(data);
+ tmpType += "Partition Start = " + HexUtils.byteArrayToHexString(data);
System.arraycopy(path, UefiConstants.OFFSET_16 + offset, data, 0, UefiConstants.SIZE_8);
- tmpType += " Partition Size = " + HexUtils.byteArrayToHexString(data);
+ tmpType += "Partition Size = " + HexUtils.byteArrayToHexString(data);
byte[] signature = new byte[UefiConstants.SIZE_16];
System.arraycopy(path, UefiConstants.OFFSET_24 + offset, signature, 0, UefiConstants.SIZE_16);
- tmpType += " Partition Signature = ";
+ tmpType += "Partition Signature = ";
if (path[UefiConstants.OFFSET_41 + offset] == UefiConstants.DRIVE_SIG_NONE) {
tmpType += "None";
} else if (path[UefiConstants.OFFSET_41 + offset] == UefiConstants.DRIVE_SIG_32BIT) {
@@ -259,7 +263,7 @@ private String hardDriveSubType(final byte[] path, final int offset) {
} else {
tmpType += "invalid partition signature type";
}
- tmpType += " Partition Format = ";
+ tmpType += "Partition Format = ";
if (path[UefiConstants.OFFSET_40 + offset] == UefiConstants.DRIVE_TYPE_PC_AT) {
tmpType += "PC-AT compatible legacy MBR";
} else if (path[UefiConstants.OFFSET_40 + offset] == UefiConstants.DRIVE_TYPE_GPT) {
@@ -267,6 +271,7 @@ private String hardDriveSubType(final byte[] path, final int offset) {
} else {
tmpType += "Invalid partition table type";
}
+ subType = tmpType;
return tmpType;
}
@@ -279,7 +284,7 @@ private String hardDriveSubType(final byte[] path, final int offset) {
*/
private String filePathSubType(final byte[] path, final int offset)
throws UnsupportedEncodingException {
- String tmpType = " File Path = ";
+ String tmpType = "File Path = ";
byte[] lengthBytes = new byte[UefiConstants.SIZE_2];
System.arraycopy(path, 2 + offset, lengthBytes, 0, UefiConstants.SIZE_2);
int subTypeLength = HexUtils.leReverseInt(lengthBytes);
@@ -287,6 +292,7 @@ private String filePathSubType(final byte[] path, final int offset)
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, filePath, 0, subTypeLength);
byte[] fileName = convertChar16tobyteArray(filePath);
tmpType += new String(fileName, "UTF-8");
+ subType = tmpType;
return tmpType;
}
@@ -300,7 +306,7 @@ private String filePathSubType(final byte[] path, final int offset)
* @return vendor device info.
*/
private String vendorSubType(final byte[] path, final int offset) {
- String tmpType = " Vendor Subtype GUID = ";
+ String tmpType = "Vendor Subtype GUID = ";
byte[] lengthBytes = new byte[UefiConstants.SIZE_2];
System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes, 0, UefiConstants.SIZE_2);
int subTypeLength = HexUtils.leReverseInt(lengthBytes);
@@ -316,6 +322,7 @@ private String vendorSubType(final byte[] path, final int offset) {
} else {
tmpType += " : No Vendor Data pesent";
}
+ subType = tmpType;
return tmpType;
}
@@ -330,13 +337,14 @@ private String vendorSubType(final byte[] path, final int offset) {
* @return NVM device info.
*/
private String nvmSubType(final byte[] path, final int offset) {
- String tmpType = " NVM Express Namespace = ";
+ String tmpType = "NVM Express Namespace = ";
byte[] lengthBytes = new byte[UefiConstants.SIZE_2];
System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes, 0, UefiConstants.SIZE_2);
int subTypeLength = HexUtils.leReverseInt(lengthBytes);
byte[] nvmData = new byte[subTypeLength];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, nvmData, 0, subTypeLength);
tmpType += HexUtils.byteArrayToHexString(nvmData);
+ subType = tmpType;
return tmpType;
}
@@ -349,7 +357,7 @@ private String nvmSubType(final byte[] path, final int offset) {
* @return String that represents the UEFI defined BIOS Device Type.
*/
private String biosDevicePath(final byte[] path, final int offset) {
- String devPath = " Legacy BIOS : Type = ";
+ String devPath = "Legacy BIOS : Type = ";
byte devPathType = path[offset + 1];
Byte pathType = Byte.valueOf(devPathType);
switch (pathType.intValue()) {
@@ -366,6 +374,7 @@ private String biosDevicePath(final byte[] path, final int offset) {
default: devPath += "Reserved";
break;
}
+ subType = devPath;
return devPath;
}
@@ -379,11 +388,12 @@ private String biosDevicePath(final byte[] path, final int offset) {
* @return String that represents the PIWG Firmware Volume Path
*/
private String piwgFirmVolFile(final byte[] path, final int offset) {
- String fWPath = " PIWG Firmware File ";
+ String fWPath = "PIWG Firmware File ";
byte[] guidData = new byte[UefiConstants.SIZE_16];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData, 0, UefiConstants.SIZE_16);
UefiGuid guid = new UefiGuid(guidData);
fWPath += guid.toString();
+ subType = fWPath;
return fWPath;
}
@@ -397,11 +407,12 @@ private String piwgFirmVolFile(final byte[] path, final int offset) {
* @return String that represents the PIWG Firmware Volume Path
*/
private String piwgFirmVolPath(final byte[] path, final int offset) {
- String fWPath = " PIWG Firmware Volume ";
+ String fWPath = "PIWG Firmware Volume ";
byte[] guidData = new byte[UefiConstants.SIZE_16];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData, 0, UefiConstants.SIZE_16);
UefiGuid guid = new UefiGuid(guidData);
fWPath += guid.toString();
+ subType = fWPath;
return fWPath;
}
diff --git a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiFirmware.java b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiFirmware.java
index e286a0d7..23f4e335 100644
--- a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiFirmware.java
+++ b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiFirmware.java
@@ -37,7 +37,7 @@ public class UefiFirmware {
byte[] lelength = HexUtils.leReverseByte(addressLength);
BigInteger bigIntLength = new BigInteger(lelength);
blobLength = bigIntLength.intValue();
- byte[]leAddress = HexUtils.leReverseByte(addressLength);
+ byte[]leAddress = HexUtils.leReverseByte(physicalAddress);
BigInteger bigIntAddress = new BigInteger(leAddress);
blobAddress = bigIntAddress.intValue();
}
diff --git a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiPartition.java b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiPartition.java
index 509f1acf..c903dfba 100644
--- a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiPartition.java
+++ b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiPartition.java
@@ -1,5 +1,7 @@
package hirs.tpm.eventlog.uefi;
+import java.io.UnsupportedEncodingException;
+
import hirs.utils.HexUtils;
/**
* Class to process EFI Partitions for EFI Partition tables defined in UEFI section 5.3.3
@@ -37,8 +39,9 @@ public class UefiPartition {
/**
* Processes a UEFI defined partition entry.
* @param table byte array holding the partition table.
+ * @throws UnsupportedEncodingException if parsing of the data fails.
*/
- public UefiPartition(final byte[] table) {
+ public UefiPartition(final byte[] table) throws UnsupportedEncodingException {
byte[] partitionGUID = new byte[UefiGuid.getGuidLength()];
System.arraycopy(table, 0, partitionGUID, 0, UefiGuid.getGuidLength());
partitionTypeGUID = new UefiGuid(partitionGUID);
@@ -52,9 +55,7 @@ public class UefiPartition {
System.arraycopy(table, UefiConstants.PART_NAME_LENGTH, partitionname,
0, UefiConstants.UEFI_PT_LENGTH);
byte[] pName = convertChar16tobyteArray(partitionname);
- partitionName = HexUtils.byteArrayToHexString(pName);
- String[] parts = partitionName.split("[^\\x00-\\x7F]"); // remove any non ASCII
- partitionName = parts[0];
+ partitionName = new String(pName, "UTF-8").trim();
}
/**
diff --git a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiVariable.java b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiVariable.java
index b354e149..d7aec349 100644
--- a/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiVariable.java
+++ b/HIRS_Utils/src/main/java/hirs/tpm/eventlog/uefi/UefiVariable.java
@@ -53,9 +53,9 @@ public UefiVariable(final byte[] varibaleData)
byte[] dataLength = new byte[UefiConstants.SIZE_8];
byte[] name = null;
int variableLength = 0;
- uefiGuid = new UefiGuid(guid);
System.arraycopy(varibaleData, 0, guid, 0, UefiConstants.SIZE_16);
+ uefiGuid = new UefiGuid(guid);
System.arraycopy(varibaleData, UefiConstants.SIZE_16, nameLength, 0, UefiConstants.SIZE_8);
int nlength = HexUtils.leReverseInt(nameLength);
System.arraycopy(varibaleData, UefiConstants.OFFSET_24, dataLength, 0, UefiConstants.SIZE_8);
diff --git a/HIRS_Utils/src/test/java/hirs/tpm/eventlog/uefi/UefiProcessingTest.java b/HIRS_Utils/src/test/java/hirs/tpm/eventlog/uefi/UefiProcessingTest.java
new file mode 100644
index 00000000..92e5b448
--- /dev/null
+++ b/HIRS_Utils/src/test/java/hirs/tpm/eventlog/uefi/UefiProcessingTest.java
@@ -0,0 +1,158 @@
+package hirs.tpm.eventlog.uefi;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import hirs.utils.HexUtils;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/*
+import org.junit.Test;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+*/
+
+/**
+ * Class for testing TCG Event Log processing of UEFI defined Data.
+ */
+public class UefiProcessingTest {
+ // Variable files collected using an Event Parsing tool
+ private static final String UEFI_VARIABLE_BOOT = "/tcgeventlog/uefi/EV_EFI_VARIABLE_BOOT.txt";
+ private static final String UEFI_VARIABLE_BOOT_SECURE_BOOT
+ = "/tcgeventlog/uefi/EV_EFI_VAR_SECURE_BOOT.txt";
+ private static final String UEFI_VARIABLE_BOOT_DRIVER_CONFIG_KEK
+ = "/tcgeventlog/uefi/EV_EFI_VARIABLE_DRIVER_CONFIG_KEK.txt";
+ private static final String UEFI_GPT_EVENT = "/tcgeventlog/uefi/EV_EFI_GPT_EVENT.txt";
+ private static final String UEFI_FW_BLOB = "/tcgeventlog/uefi/EFI_PLATFORM_FIRMWARE_BLOB.txt";
+ private static final String UEFI_DEVICE_PATH = "/tcgeventlog/uefi/EFI_DEVICE_PATH.txt";
+
+ private static final Logger LOGGER
+ = LogManager.getLogger(UefiProcessingTest.class);
+
+/**
+ * Initializes a SessionFactory
.
+ * The factory is used for an in-memory database that is used for testing.
+ */
+@BeforeClass
+public static final void setup() {
+ LOGGER.debug("retrieving session factory");
+}
+
+/**
+ * Closes the SessionFactory
from setup.
+ */
+@AfterClass
+public static final void tearDown() {
+ LOGGER.debug("closing session factory");
+}
+
+/**
+ * Tests the processing of UEFI Variables.
+ * @throws IOException when processing the test fails.
+ * @throws NoSuchAlgorithmException if non TCG Algorithm is encountered.
+ * @throws CertificateException if parsing issue for X509 cert is encountered.
+ */
+@Test
+public final void testUefiVariables() throws IOException,
+ CertificateException, NoSuchAlgorithmException {
+ LOGGER.debug("Testing the parsing of UEFI Variables");
+ String uefiTxt = IOUtils.toString(this.getClass().getResourceAsStream(UEFI_VARIABLE_BOOT),
+ "UTF-8");
+ byte[] uefiVariableBytes = HexUtils.hexStringToByteArray(uefiTxt);
+ UefiVariable uefiVariable = new UefiVariable(uefiVariableBytes);
+ UefiGuid guid = uefiVariable.getEfiVarGuid();
+ String varName = uefiVariable.getEfiVarName();
+ Assert.assertEquals(guid.toString(),
+ "8be4df61-93ca-11d2-aa0d-00e098032b8c : EFI_Global_Variable");
+ Assert.assertEquals(varName, "BootOrder");
+
+ uefiTxt = IOUtils.toString(this.getClass().getResourceAsStream(UEFI_VARIABLE_BOOT_SECURE_BOOT),
+ "UTF-8");
+ uefiVariableBytes = HexUtils.hexStringToByteArray(uefiTxt);
+ uefiVariable = new UefiVariable(uefiVariableBytes);
+ guid = uefiVariable.getEfiVarGuid();
+ varName = uefiVariable.getEfiVarName();
+ Assert.assertEquals(guid.toString(),
+ "8be4df61-93ca-11d2-aa0d-00e098032b8c : EFI_Global_Variable");
+ Assert.assertEquals(varName, "SecureBoot");
+
+ uefiTxt = IOUtils.toString(this.getClass().getResourceAsStream(
+ UEFI_VARIABLE_BOOT_DRIVER_CONFIG_KEK), "UTF-8");
+ uefiVariableBytes = HexUtils.hexStringToByteArray(uefiTxt);
+ uefiVariable = new UefiVariable(uefiVariableBytes);
+ varName = uefiVariable.getEfiVarName();
+ Assert.assertEquals(varName, "KEK");
+}
+
+/**
+ * Tests the processing of a UEFI defined GPT Partition event.
+ * @throws IOException when processing the test fails.
+ * @throws NoSuchAlgorithmException if non TCG Algorithm is encountered.
+ * @throws CertificateException if parsing issue for X509 cert is encountered.
+ */
+@Test
+public final void testUefiPartiton() throws IOException,
+ CertificateException, NoSuchAlgorithmException {
+ LOGGER.debug("Testing the parsing of GPT Data");
+ String uefiTxt = IOUtils.toString(this.getClass().getResourceAsStream(UEFI_GPT_EVENT),
+ "UTF-8");
+ byte[] uefiPartitionBytes = HexUtils.hexStringToByteArray(uefiTxt);
+ UefiPartition gptPart = new UefiPartition(uefiPartitionBytes);
+ String gptPartName = gptPart.getName();
+ UefiGuid gptTypeuid = gptPart.getPartitionTypeGUID();
+ UefiGuid gptUniqueGuid = gptPart.getUniquePartitionGUID();
+ Assert.assertEquals(gptTypeuid.toString(),
+ "c12a7328-f81f-11d2-ba4b-00a0c93ec93b : EFI System Partition");
+ Assert.assertEquals(gptUniqueGuid.toString(),
+ "8ca7623c-041e-4fab-8c12-f49a86b85d73 : Unknown GUID reference");
+ Assert.assertEquals(gptPartName, "EFI system partition");
+ }
+
+/**
+ * Tests the processing of a UEFI defined GPT Partition event.
+ * @throws IOException when processing the test fails.
+ * @throws NoSuchAlgorithmException if non TCG Algorithm is encountered.
+ * @throws CertificateException if parsing issue for X509 cert is encountered.
+ */
+@Test
+public final void testUefiFirmwareBlob() throws IOException,
+ CertificateException, NoSuchAlgorithmException {
+ LOGGER.debug("Testing the parsing of Uefi Firmware Blob");
+ String uefiTxt = IOUtils.toString(this.getClass().getResourceAsStream(UEFI_FW_BLOB), "UTF-8");
+ byte[] uefiFwBlobBytes = HexUtils.hexStringToByteArray(uefiTxt);
+ UefiFirmware uefiFWBlob = new UefiFirmware(uefiFwBlobBytes);
+ int fwAddress = uefiFWBlob.getPhysicalAddress();
+ int fwLength = uefiFWBlob.getBlobLength();
+ Assert.assertEquals(fwAddress, 1797287936);
+ Assert.assertEquals(fwLength, 851968);
+}
+
+/**
+ * Tests the processing of a UEFI defined Device Path.
+ * @throws IOException when processing the test fails.
+ */
+@Test
+public final void testUefiDevicePath() throws IOException {
+
+ LOGGER.debug("Testing the parsing of Uefi Device Path");
+ String uefiTxt = IOUtils.toString(this.getClass().getResourceAsStream(UEFI_DEVICE_PATH),
+ "UTF-8");
+ byte[] uefiFwBlobBytes = HexUtils.hexStringToByteArray(uefiTxt);
+ UefiDevicePath uefiDevPath = new UefiDevicePath(uefiFwBlobBytes);
+ String devPathType = uefiDevPath.getType();
+ String devPathSubType = uefiDevPath.getSubType();
+ Assert.assertEquals(devPathType, "Media Device Path");
+ Assert.assertEquals(devPathSubType,
+ "PIWG Firmware File 15e1e31a-9f9d-4c84-82fb-1a707fc0f63b : RSTeSATAEFI");
+
+ }
+}
+
diff --git a/HIRS_Utils/src/test/java/hirs/tpm/eventlog/uefi/package-info.java b/HIRS_Utils/src/test/java/hirs/tpm/eventlog/uefi/package-info.java
new file mode 100644
index 00000000..d353f28a
--- /dev/null
+++ b/HIRS_Utils/src/test/java/hirs/tpm/eventlog/uefi/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * Test classes for the hirs.tpm package.
+ */
+
+package hirs.tpm.eventlog.uefi;
diff --git a/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EFI_DEVICE_PATH.txt b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EFI_DEVICE_PATH.txt
new file mode 100644
index 00000000..7802a6f4
--- /dev/null
+++ b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EFI_DEVICE_PATH.txt
@@ -0,0 +1 @@
+040714002ce2edb630defa45bb09ca202c1654b7040614001ae3e1159d9f844c82fb1a707fc0f63b7fff0400
\ No newline at end of file
diff --git a/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EFI_PLATFORM_FIRMWARE_BLOB.txt b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EFI_PLATFORM_FIRMWARE_BLOB.txt
new file mode 100644
index 00000000..ceab9816
--- /dev/null
+++ b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EFI_PLATFORM_FIRMWARE_BLOB.txt
@@ -0,0 +1 @@
+0070206b0000000000000d0000000000
\ No newline at end of file
diff --git a/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_GPT_EVENT.txt b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_GPT_EVENT.txt
new file mode 100644
index 00000000..f82c5911
--- /dev/null
+++ b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_GPT_EVENT.txt
@@ -0,0 +1 @@
+28732ac11ff8d211ba4b00a0c93ec93b3c62a78c1e04ab4f8c12f49a86b85d7300a80f0000000000ffc712000000000000000000000000804500460049002000730079007300740065006d00200070006100720074006900740069006f006e000000000000000000000000000000000000000000000000000000000000000000
\ No newline at end of file
diff --git a/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VARIABLE_BOOT.txt b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VARIABLE_BOOT.txt
new file mode 100644
index 00000000..8b6b3d49
--- /dev/null
+++ b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VARIABLE_BOOT.txt
@@ -0,0 +1 @@
+61dfe48bca93d211aa0d00e098032b8c09000000000000000c0000000000000042006f006f0074004f007200640065007200040003000200000001000500
\ No newline at end of file
diff --git a/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VARIABLE_DRIVER_CONFIG_KEK.txt b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VARIABLE_DRIVER_CONFIG_KEK.txt
new file mode 100644
index 00000000..b0b75029
--- /dev/null
+++ b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VARIABLE_DRIVER_CONFIG_KEK.txt
@@ -0,0 +1 @@
+61dfe48bca93d211aa0d00e098032b8c030000000000000000000000000000004b0045004b00
\ No newline at end of file
diff --git a/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VAR_SECURE_BOOT.txt b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VAR_SECURE_BOOT.txt
new file mode 100644
index 00000000..bf6b6d07
--- /dev/null
+++ b/HIRS_Utils/src/test/resources/tcgeventlog/uefi/EV_EFI_VAR_SECURE_BOOT.txt
@@ -0,0 +1 @@
+61dfe48bca93d211aa0d00e098032b8c0a00000000000000010000000000000053006500630075007200650042006f006f00740000