Merge pull request #702 from nsacyber/v3_issue-checkstyle

[#643] Checkstyles implementation
This commit is contained in:
Cyrus 2024-02-06 08:24:51 -05:00 committed by GitHub
commit 07495dc966
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 286 additions and 146 deletions

View File

@ -2,6 +2,7 @@ plugins {
id 'java' id 'java'
id 'io.spring.dependency-management' version '1.1.0' id 'io.spring.dependency-management' version '1.1.0'
id 'com.google.protobuf' version '0.9.4' id 'com.google.protobuf' version '0.9.4'
id 'checkstyle'
} }
java { java {
@ -57,7 +58,28 @@ dependencies {
implementation libs.lombok implementation libs.lombok
annotationProcessor libs.lombok annotationProcessor libs.lombok
} }
checkstyle {
toolVersion = '10.12.7'
configFile file("${rootDir}/config/checkstyle/checkstyle.xml")
}
// https://github.com/checkstyle/checkstyle/issues/14211#issuecomment-1884129948
configurations.checkstyle {
resolutionStrategy.capabilitiesResolution.withCapability("com.google.collections:google-collections") {
select("com.google.guava:guava:0")
}
}
checkstyleMain {
source ='src/main/java'
}
checkstyleTest {
source ='src/test/java'
}
tasks.withType(Checkstyle) {
reports {
xml.required = false
html.required = true
}
}
protobuf { protobuf {
protoc { protoc {
artifact = 'com.google.protobuf:protoc:3.24.3' artifact = 'com.google.protobuf:protoc:3.24.3'

View File

@ -5,6 +5,7 @@ plugins {
id 'com.netflix.nebula.ospackage' version '11.4.0' id 'com.netflix.nebula.ospackage' version '11.4.0'
id 'org.springframework.boot' version '3.0.6' id 'org.springframework.boot' version '3.0.6'
id 'io.spring.dependency-management' version '1.1.0' id 'io.spring.dependency-management' version '1.1.0'
id 'checkstyle'
} }
// Get version from main project gradle // Get version from main project gradle
@ -59,6 +60,29 @@ dependencies {
testImplementation 'org.hsqldb:hsqldb' testImplementation 'org.hsqldb:hsqldb'
} }
checkstyle {
toolVersion = '10.12.7'
configFile file("${rootDir}/config/checkstyle/checkstyle.xml")
}
// https://github.com/checkstyle/checkstyle/issues/14211#issuecomment-1884129948
configurations.checkstyle {
resolutionStrategy.capabilitiesResolution.withCapability("com.google.collections:google-collections") {
select("com.google.guava:guava:0")
}
}
checkstyleMain {
source ='src/main/java'
}
checkstyleTest {
source ='src/test/java'
}
tasks.withType(Checkstyle) {
reports {
xml.required = false
html.required = true
}
}
test { test {
useJUnitPlatform() useJUnitPlatform()
} }

View File

@ -1,9 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<suppress checks="MagicNumber" files=".*[/\\]src[/\\]test[/\\]+" />
</suppressions>

View File

@ -1,6 +1,6 @@
plugins { plugins {
id 'java' id 'java'
// id 'checkstyle' id 'checkstyle'
} }
java { java {
@ -28,17 +28,29 @@ test {
useJUnitPlatform() useJUnitPlatform()
} }
//ext.configDir = new File(projectDir, 'config') checkstyle {
//ext.checkstyleConfigDir = "$configDir/checkstyle" toolVersion = '10.12.7'
configFile file("${rootDir}/config/checkstyle/checkstyle.xml")
}
// https://github.com/checkstyle/checkstyle/issues/14211#issuecomment-1884129948
configurations.checkstyle {
resolutionStrategy.capabilitiesResolution.withCapability("com.google.collections:google-collections") {
select("com.google.guava:guava:0")
}
}
checkstyleMain {
source ='src/main/java'
}
checkstyleTest {
source ='src/test/java'
}
tasks.withType(Checkstyle) {
reports {
xml.required = false
html.required = true
}
}
//checkstyle {
// toolVersion = '5.7'
// configFile = checkstyleConfigFile
// configProperties.put('basedir', checkstyleConfigDir)
// ignoreFailures = false
// showViolations = true
//}
//
//publishing { //publishing {
// publications { // publications {
// maven(MavenPublication) { // maven(MavenPublication) {

View File

@ -1,9 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<suppress checks="MagicNumber" files=".*[/\\]src[/\\]test[/\\]+" />
</suppressions>

View File

@ -1,5 +1,6 @@
plugins { plugins {
id 'java' id 'java'
id 'checkstyle'
} }
// Get version from main project gradle // Get version from main project gradle
def packVersion = properties.get("packageVersion"); def packVersion = properties.get("packageVersion");
@ -54,6 +55,29 @@ dependencies {
} }
checkstyle {
toolVersion = '10.12.7'
configFile file("${rootDir}/config/checkstyle/checkstyle.xml")
}
// https://github.com/checkstyle/checkstyle/issues/14211#issuecomment-1884129948
configurations.checkstyle {
resolutionStrategy.capabilitiesResolution.withCapability("com.google.collections:google-collections") {
select("com.google.guava:guava:0")
}
}
checkstyleMain {
source ='src/main/java'
}
checkstyleTest {
source ='src/test/java'
}
tasks.withType(Checkstyle) {
reports {
xml.required = false
html.required = true
}
}
test { test {
useJUnitPlatform() useJUnitPlatform()
} }

View File

@ -59,11 +59,14 @@ public class UefiBootVariable {
System.arraycopy(bootVar, UefiConstants.OFFSET_6, blob, 0, blobLength); System.arraycopy(bootVar, UefiConstants.OFFSET_6, blob, 0, blobLength);
int descLength = getChar16ArrayLength(blob); int descLength = getChar16ArrayLength(blob);
byte[] desc = new byte[descLength * UefiConstants.SIZE_2]; byte[] desc = new byte[descLength * UefiConstants.SIZE_2];
System.arraycopy(bootVar, UefiConstants.OFFSET_6, desc, 0, descLength * UefiConstants.SIZE_2); System.arraycopy(bootVar, UefiConstants.OFFSET_6, desc, 0,
description = new String(UefiDevicePath.convertChar16tobyteArray(desc), StandardCharsets.UTF_8); descLength * UefiConstants.SIZE_2);
description = new String(UefiDevicePath.convertChar16tobyteArray(desc),
StandardCharsets.UTF_8);
// Data following the Description should be EFI Partition Data (EFI_DEVICE_PATH_PROTOCOL) // Data following the Description should be EFI Partition Data (EFI_DEVICE_PATH_PROTOCOL)
int devPathLength = blobLength; int devPathLength = blobLength;
int devPathOffset = UefiConstants.OFFSET_6 + descLength; //attributes+bloblength+desc+length+2 //attributes+bloblength+desc+length+2
int devPathOffset = UefiConstants.OFFSET_6 + descLength;
byte[] devPath = new byte[devPathLength]; byte[] devPath = new byte[devPathLength];
System.arraycopy(bootVar, devPathOffset, devPath, 0, devPathLength); System.arraycopy(bootVar, devPathOffset, devPath, 0, devPathLength);
efiDevPath = new UefiDevicePath(devPath); efiDevPath = new UefiDevicePath(devPath);
@ -79,7 +82,8 @@ public class UefiBootVariable {
*/ */
public String toString() { public String toString() {
StringBuilder bootInfo = new StringBuilder("Description = "); StringBuilder bootInfo = new StringBuilder("Description = ");
String bootVar = description.replaceAll("[^a-zA-Z_0-0\\s]", ""); // remove all non ascii chars // remove all non ascii chars
String bootVar = description.replaceAll("[^a-zA-Z_0-0\\s]", "");
bootInfo.append(bootVar + "\n" + efiDevPath.toString()); bootInfo.append(bootVar + "\n" + efiDevPath.toString());
return bootInfo.toString(); return bootInfo.toString();
} }

View File

@ -255,15 +255,19 @@ public class UefiDevicePath {
private String hardDriveSubType(final byte[] path, final int offset) { private String hardDriveSubType(final byte[] path, final int offset) {
subType = "Partition Number = "; subType = "Partition Number = ";
byte[] partnumber = new byte[UefiConstants.SIZE_4]; byte[] partnumber = new byte[UefiConstants.SIZE_4];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, partnumber, 0, UefiConstants.SIZE_4); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, partnumber,
0, UefiConstants.SIZE_4);
subType += HexUtils.byteArrayToHexString(partnumber); subType += HexUtils.byteArrayToHexString(partnumber);
byte[] data = new byte[UefiConstants.SIZE_8]; byte[] data = new byte[UefiConstants.SIZE_8];
System.arraycopy(path, UefiConstants.OFFSET_8 + offset, data, 0, UefiConstants.SIZE_8); System.arraycopy(path, UefiConstants.OFFSET_8 + offset, data, 0,
UefiConstants.SIZE_8);
subType += " Partition Start = " + HexUtils.byteArrayToHexString(data); subType += " Partition Start = " + HexUtils.byteArrayToHexString(data);
System.arraycopy(path, UefiConstants.OFFSET_16 + offset, data, 0, UefiConstants.SIZE_8); System.arraycopy(path, UefiConstants.OFFSET_16 + offset, data, 0,
UefiConstants.SIZE_8);
subType += " Partition Size = " + HexUtils.byteArrayToHexString(data); subType += " Partition Size = " + HexUtils.byteArrayToHexString(data);
byte[] signature = new byte[UefiConstants.SIZE_16]; byte[] signature = new byte[UefiConstants.SIZE_16];
System.arraycopy(path, UefiConstants.OFFSET_24 + offset, signature, 0, UefiConstants.SIZE_16); System.arraycopy(path, UefiConstants.OFFSET_24 + offset, signature, 0,
UefiConstants.SIZE_16);
subType += "\n Partition Signature = "; subType += "\n Partition Signature = ";
if (path[UefiConstants.OFFSET_41 + offset] == UefiConstants.DRIVE_SIG_NONE) { if (path[UefiConstants.OFFSET_41 + offset] == UefiConstants.DRIVE_SIG_NONE) {
subType += "None"; subType += "None";
@ -299,7 +303,8 @@ public class UefiDevicePath {
System.arraycopy(path, 2 + offset, lengthBytes, 0, UefiConstants.SIZE_2); System.arraycopy(path, 2 + offset, lengthBytes, 0, UefiConstants.SIZE_2);
int subTypeLength = HexUtils.leReverseInt(lengthBytes); int subTypeLength = HexUtils.leReverseInt(lengthBytes);
byte[] filePath = new byte[subTypeLength]; byte[] filePath = new byte[subTypeLength];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, filePath, 0, subTypeLength); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, filePath,
0, subTypeLength);
byte[] fileName = convertChar16tobyteArray(filePath); byte[] fileName = convertChar16tobyteArray(filePath);
subType += new String(fileName, StandardCharsets.UTF_8); subType += new String(fileName, StandardCharsets.UTF_8);
return subType; return subType;
@ -318,10 +323,12 @@ public class UefiDevicePath {
private String vendorSubType(final byte[] path, final int offset) { private String vendorSubType(final byte[] path, final int offset) {
subType = "Vendor Subtype GUID = "; subType = "Vendor Subtype GUID = ";
byte[] lengthBytes = new byte[UefiConstants.SIZE_2]; byte[] lengthBytes = new byte[UefiConstants.SIZE_2];
System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes, 0, UefiConstants.SIZE_2); System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes,
0, UefiConstants.SIZE_2);
int subTypeLength = HexUtils.leReverseInt(lengthBytes); int subTypeLength = HexUtils.leReverseInt(lengthBytes);
byte[] guidData = new byte[UefiConstants.SIZE_16]; byte[] guidData = new byte[UefiConstants.SIZE_16];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData, 0, UefiConstants.SIZE_16); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData,
0, UefiConstants.SIZE_16);
UefiGuid guid = new UefiGuid(guidData); UefiGuid guid = new UefiGuid(guidData);
subType += guid.toString() + " "; subType += guid.toString() + " ";
if (subTypeLength - UefiConstants.SIZE_16 > 0) { if (subTypeLength - UefiConstants.SIZE_16 > 0) {
@ -348,10 +355,12 @@ public class UefiDevicePath {
subType += " port = " + Integer.valueOf(path[offset + UefiConstants.OFFSET_4]); subType += " port = " + Integer.valueOf(path[offset + UefiConstants.OFFSET_4]);
subType += " interface = " + Integer.valueOf(path[offset + UefiConstants.OFFSET_5]); subType += " interface = " + Integer.valueOf(path[offset + UefiConstants.OFFSET_5]);
byte[] lengthBytes = new byte[UefiConstants.SIZE_2]; byte[] lengthBytes = new byte[UefiConstants.SIZE_2];
System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes, 0, UefiConstants.SIZE_2); System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes,
0, UefiConstants.SIZE_2);
int subTypeLength = HexUtils.leReverseInt(lengthBytes); int subTypeLength = HexUtils.leReverseInt(lengthBytes);
byte[] usbData = new byte[subTypeLength]; byte[] usbData = new byte[subTypeLength];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, usbData, 0, subTypeLength); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, usbData,
0, subTypeLength);
// Todo add further USB processing ... // Todo add further USB processing ...
return subType; return subType;
} }
@ -370,10 +379,12 @@ public class UefiDevicePath {
private String nvmSubType(final byte[] path, final int offset) { private String nvmSubType(final byte[] path, final int offset) {
subType = "NVM Express Namespace = "; subType = "NVM Express Namespace = ";
byte[] lengthBytes = new byte[UefiConstants.SIZE_2]; byte[] lengthBytes = new byte[UefiConstants.SIZE_2];
System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes, 0, UefiConstants.SIZE_2); System.arraycopy(path, UefiConstants.OFFSET_2 + offset, lengthBytes,
0, UefiConstants.SIZE_2);
int subTypeLength = HexUtils.leReverseInt(lengthBytes); int subTypeLength = HexUtils.leReverseInt(lengthBytes);
byte[] nvmData = new byte[subTypeLength]; byte[] nvmData = new byte[subTypeLength];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, nvmData, 0, subTypeLength); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, nvmData,
0, subTypeLength);
subType += HexUtils.byteArrayToHexString(nvmData); subType += HexUtils.byteArrayToHexString(nvmData);
return subType; return subType;
} }
@ -385,6 +396,7 @@ public class UefiDevicePath {
* Status bootHandler pointer, and description String pointer are ignored. * Status bootHandler pointer, and description String pointer are ignored.
* *
* @param path byte array holding the device path. * @param path byte array holding the device path.
* @param offset
* @return String that represents the UEFI defined BIOS Device Type. * @return String that represents the UEFI defined BIOS Device Type.
*/ */
private String biosDevicePath(final byte[] path, final int offset) { private String biosDevicePath(final byte[] path, final int offset) {
@ -436,7 +448,8 @@ public class UefiDevicePath {
private String piwgFirmVolFile(final byte[] path, final int offset) { private String piwgFirmVolFile(final byte[] path, final int offset) {
subType = "PIWG Firmware File "; subType = "PIWG Firmware File ";
byte[] guidData = new byte[UefiConstants.SIZE_16]; byte[] guidData = new byte[UefiConstants.SIZE_16];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData, 0, UefiConstants.SIZE_16); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData,
0, UefiConstants.SIZE_16);
UefiGuid guid = new UefiGuid(guidData); UefiGuid guid = new UefiGuid(guidData);
subType += guid.toString(); subType += guid.toString();
return subType; return subType;
@ -455,7 +468,8 @@ public class UefiDevicePath {
private String piwgFirmVolPath(final byte[] path, final int offset) { private String piwgFirmVolPath(final byte[] path, final int offset) {
subType = "PIWG Firmware Volume "; subType = "PIWG Firmware Volume ";
byte[] guidData = new byte[UefiConstants.SIZE_16]; byte[] guidData = new byte[UefiConstants.SIZE_16];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData, 0, UefiConstants.SIZE_16); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, guidData,
0, UefiConstants.SIZE_16);
UefiGuid guid = new UefiGuid(guidData); UefiGuid guid = new UefiGuid(guidData);
subType += guid.toString(); subType += guid.toString();
return subType; return subType;

View File

@ -65,6 +65,8 @@ public class UefiGuid {
* Converts a GUID with a byte array to a RFC-1422 UUID object. * Converts a GUID with a byte array to a RFC-1422 UUID object.
* Assumes a MS format and converts to Big Endian format used by most others , including Linux * Assumes a MS format and converts to Big Endian format used by most others , including Linux
* Matched uuids found in /sys/firmware/efi/efivars on Centos 7. * Matched uuids found in /sys/firmware/efi/efivars on Centos 7.
* @param guid byte array holding the guid data.
* @return UUID processed from the passed in guid
*/ */
private static UUID processGuid(final byte[] guid) { private static UUID processGuid(final byte[] guid) {
byte[] msb1 = new byte[UefiConstants.SIZE_4]; byte[] msb1 = new byte[UefiConstants.SIZE_4];
@ -181,10 +183,10 @@ public class UefiGuid {
/** /**
* Retrieves the timestamp within a time based GUID. * Retrieves the timestamp within a time based GUID.
* *
* @param uuid uuid object * @param uuidTimeStamp uuid object
* @return long representing the time stamp from the GUID * @return long representing the time stamp from the GUID
*/ */
public long getTimeFromUUID(final UUID uuid) { public long getTimeFromUUID(final UUID uuidTimeStamp) {
return (uuid.timestamp() - UUID_EPOCH_INTERVALS) / UUID_EPOCH_DIVISOR; return (uuidTimeStamp.timestamp() - UUID_EPOCH_INTERVALS) / UUID_EPOCH_DIVISOR;
} }
} }

View File

@ -49,7 +49,8 @@ public class UefiPartition {
System.arraycopy(table, 0, partitionGuidBytes, 0, UefiConstants.SIZE_16); System.arraycopy(table, 0, partitionGuidBytes, 0, UefiConstants.SIZE_16);
partitionTypeGUID = new UefiGuid(partitionGuidBytes); partitionTypeGUID = new UefiGuid(partitionGuidBytes);
byte[] uniquePartGuidBytes = new byte[UefiConstants.SIZE_16]; byte[] uniquePartGuidBytes = new byte[UefiConstants.SIZE_16];
System.arraycopy(table, UefiConstants.SIZE_16, uniquePartGuidBytes, 0, UefiConstants.SIZE_16); System.arraycopy(table, UefiConstants.SIZE_16, uniquePartGuidBytes,
0, UefiConstants.SIZE_16);
uniquePartitionGUID = new UefiGuid(uniquePartGuidBytes); uniquePartitionGUID = new UefiGuid(uniquePartGuidBytes);
byte[] attributeBytes = new byte[UefiConstants.SIZE_8]; byte[] attributeBytes = new byte[UefiConstants.SIZE_8];
System.arraycopy(table, UefiConstants.ATTRIBUTE_LENGTH, attributeBytes, System.arraycopy(table, UefiConstants.ATTRIBUTE_LENGTH, attributeBytes,

View File

@ -119,7 +119,8 @@ public class UefiSignatureData {
UefiSignatureData(final byte[] data) throws CertificateException, NoSuchAlgorithmException { UefiSignatureData(final byte[] data) throws CertificateException, NoSuchAlgorithmException {
System.arraycopy(data, 0, guid, 0, UefiConstants.SIZE_16); System.arraycopy(data, 0, guid, 0, UefiConstants.SIZE_16);
sigData = new byte[data.length - UefiConstants.SIZE_16]; sigData = new byte[data.length - UefiConstants.SIZE_16];
System.arraycopy(data, UefiConstants.OFFSET_16, sigData, 0, data.length - UefiConstants.SIZE_16); System.arraycopy(data, UefiConstants.OFFSET_16, sigData, 0,
data.length - UefiConstants.SIZE_16);
cert = new UefiX509Cert(sigData); cert = new UefiX509Cert(sigData);
efiVarGuid = new UefiGuid(guid); efiVarGuid = new UefiGuid(guid);
} }

View File

@ -61,9 +61,12 @@ public class UefiVariable {
* the class used to parse the data within the "VariableData". * the class used to parse the data within the "VariableData".
* *
* @param variableData byte array holding the UEFI Variable. * @param variableData byte array holding the UEFI Variable.
* @throws java.security.cert.CertificateException If there a problem parsing the X509 certificate. * @throws java.security.cert.CertificateException If there a problem
* @throws java.security.NoSuchAlgorithmException if there's a problem hashing the certificate. * parsing the X509 certificate.
* @throws java.io.IOException If there's a problem parsing the signature data. * @throws java.security.NoSuchAlgorithmException if there's a problem
* hashing the certificate.
* @throws java.io.IOException If there's a problem
* parsing the signature data.
*/ */
public UefiVariable(final byte[] variableData) public UefiVariable(final byte[] variableData)
throws CertificateException, NoSuchAlgorithmException, IOException { throws CertificateException, NoSuchAlgorithmException, IOException {
@ -77,9 +80,11 @@ public class UefiVariable {
System.arraycopy(variableData, 0, guid, 0, UefiConstants.SIZE_16); System.arraycopy(variableData, 0, guid, 0, UefiConstants.SIZE_16);
uefiVarGuid = new UefiGuid(guid); uefiVarGuid = new UefiGuid(guid);
System.arraycopy(variableData, UefiConstants.SIZE_16, nameLength, 0, UefiConstants.SIZE_8); System.arraycopy(variableData, UefiConstants.SIZE_16, nameLength,
0, UefiConstants.SIZE_8);
int nlength = HexUtils.leReverseInt(nameLength); int nlength = HexUtils.leReverseInt(nameLength);
System.arraycopy(variableData, UefiConstants.OFFSET_24, dataLength, 0, UefiConstants.SIZE_8); System.arraycopy(variableData, UefiConstants.OFFSET_24, dataLength,
0, UefiConstants.SIZE_8);
nameTemp = new byte[nlength * UefiConstants.SIZE_2]; nameTemp = new byte[nlength * UefiConstants.SIZE_2];
System.arraycopy(variableData, UefiConstants.OFFSET_32, System.arraycopy(variableData, UefiConstants.OFFSET_32,
@ -120,9 +125,12 @@ public class UefiVariable {
* Processes the data as a UEFI defined Signature List. * Processes the data as a UEFI defined Signature List.
* *
* @param data the bye array holding the Signature List. * @param data the bye array holding the Signature List.
* @throws java.security.cert.CertificateException If there a problem parsing the X509 certificate. * @throws java.security.cert.CertificateException If there a problem
* @throws java.security.NoSuchAlgorithmException if there's a problem hashing the certificate. * parsing the X509 certificate.
* @throws java.io.IOException If there's a problem parsing the signature data. * @throws java.security.NoSuchAlgorithmException if there's a problem
* hashing the certificate.
* @throws java.io.IOException If there's a problem
* parsing the signature data.
*/ */
private void processSigList(final byte[] data) private void processSigList(final byte[] data)
throws CertificateException, NoSuchAlgorithmException, IOException { throws CertificateException, NoSuchAlgorithmException, IOException {
@ -168,8 +176,8 @@ public class UefiVariable {
break; break;
default: default:
if (!tmpName.isEmpty()) { if (!tmpName.isEmpty()) {
efiVariable.append(String.format("Data not provided for UEFI variable named %s ", efiVariable.append(String.format("Data not provided for "
tmpName)); + "UEFI variable named %s ", tmpName));
} else { } else {
efiVariable.append("Data not provided "); efiVariable.append("Data not provided ");
} }
@ -190,7 +198,8 @@ public class UefiVariable {
public String printCert(final byte[] data, final int offset) { public String printCert(final byte[] data, final int offset) {
String certInfo = ""; String certInfo = "";
byte[] certLength = new byte[UefiConstants.SIZE_2]; byte[] certLength = new byte[UefiConstants.SIZE_2];
System.arraycopy(data, offset + UefiConstants.OFFSET_2, certLength, 0, UefiConstants.SIZE_2); System.arraycopy(data, offset + UefiConstants.OFFSET_2, certLength,
0, UefiConstants.SIZE_2);
int cLength = new BigInteger(certLength).intValue() + UefiConstants.SIZE_4; int cLength = new BigInteger(certLength).intValue() + UefiConstants.SIZE_4;
byte[] certData = new byte[cLength]; byte[] certData = new byte[cLength];
System.arraycopy(data, offset, certData, 0, cLength); System.arraycopy(data, offset, certData, 0, cLength);

View File

@ -27,7 +27,8 @@ public class UefiX509Cert {
* @throws java.security.cert.CertificateException If the certificate cannot parse. * @throws java.security.cert.CertificateException If the certificate cannot parse.
* @throws java.security.NoSuchAlgorithmException if a hash cannot be generated from the cert. * @throws java.security.NoSuchAlgorithmException if a hash cannot be generated from the cert.
*/ */
public UefiX509Cert(final byte[] certData) throws CertificateException, NoSuchAlgorithmException { public UefiX509Cert(final byte[] certData) throws CertificateException,
NoSuchAlgorithmException {
CertificateFactory cf; CertificateFactory cf;
cf = CertificateFactory.getInstance("X.509"); cf = CertificateFactory.getInstance("X.509");
InputStream targetStream = new ByteArrayInputStream(certData); InputStream targetStream = new ByteArrayInputStream(certData);

View File

@ -1,77 +1,94 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module PUBLIC <!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN" "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> "https://checkstyle.org/dtds/configuration_1_3.dtd">
<!-- <!--
Checkstyle configuration that checks the sun coding conventions from: Checkstyle configuration that checks the sun coding conventions from:
- the Java Language Specification at - the Java Language Specification at
http://java.sun.com/docs/books/jls/second_edition/html/index.html https://docs.oracle.com/javase/specs/jls/se11/html/index.html
- the Sun Code Conventions at http://java.sun.com/docs/codeconv/ - the Sun Code Conventions at https://www.oracle.com/java/technologies/javase/codeconventions-contents.html
- the Javadoc guidelines at - the Javadoc guidelines at
http://java.sun.com/j2se/javadoc/writingdoccomments/index.html https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html
- the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html - the JDK Api documentation https://docs.oracle.com/en/java/javase/11/
- some best practices - some best practices
Checkstyle is very configurable. Be sure to read the documentation at Checkstyle is very configurable. Be sure to read the documentation at
http://checkstyle.sf.net (or in your downloaded distribution). https://checkstyle.org (or in your downloaded distribution).
Most Checks are configurable, be sure to consult the documentation. Most Checks are configurable, be sure to consult the documentation.
To completely disable a check, just comment it out or delete it from the file. To completely disable a check, just comment it out or delete it from the file.
To suppress certain violations please review suppression filters.
Finally, it is worth reading the documentation. Finally, it is worth reading the documentation.
--> -->
<module name="Checker"> <module name="Checker">
<property name="basedir" value="${basedir}"/> <!--
If you set the basedir property below, then all reported file
names will be relative to the specified directory. See
https://checkstyle.org/config.html#Checker
<!-- Suppressions for rules --> <property name="basedir" value="${basedir}"/>
<module name="SuppressionFilter"> -->
<property name="file" value="${basedir}/suppressions.xml"/> <property name="severity" value="warning"/>
<property name="fileExtensions" value="java"/>
<!-- Excludes all 'module-info.java' files -->
<!-- See https://checkstyle.org/filefilters/index.html -->
<module name="BeforeExecutionExclusionFileFilter">
<property name="fileNamePattern" value="module\-info\.java$"/>
</module>
<!-- https://checkstyle.org/filters/suppressionfilter.html -->
<module name="SuppressionFilter">
<property name="file" value="${config_loc}/suppressions.xml"/>
<property name="optional" value="false"/>
</module> </module>
<module name="SuppressWarningsFilter"/>
<!-- Checks that a package-info.java file exists for each package. --> <!-- Checks that a package-info.java file exists for each package. -->
<!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage --> <!-- See https://checkstyle.org/checks/javadoc/javadocpackage.html#JavadocPackage -->
<module name="JavadocPackage"/> <module name="JavadocPackage"/>
<!-- Checks whether files end with a new line. --> <!-- Checks whether files end with a new line. -->
<!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile --> <!-- See https://checkstyle.org/checks/misc/newlineatendoffile.html -->
<module name="NewlineAtEndOfFile"> <module name="NewlineAtEndOfFile"/>
<property name="lineSeparator" value="lf" />
</module>
<!-- Checks that property files contain the same keys. --> <!-- Checks that property files contain the same keys. -->
<!-- See http://checkstyle.sf.net/config_misc.html#Translation --> <!-- See https://checkstyle.org/checks/misc/translation.html -->
<module name="Translation"/> <module name="Translation"/>
<!-- Checks for Size Violations. --> <!-- Checks for Size Violations. -->
<!-- See http://checkstyle.sf.net/config_sizes.html --> <!-- See https://checkstyle.org/checks/sizes/index.html -->
<module name="FileLength"/> <module name="FileLength"/>
<module name="LineLength">
<property name="fileExtensions" value="java"/>
<property name="max" value="110"/>
</module>
<!-- Checks for whitespace --> <!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html --> <!-- See https://checkstyle.org/checks/whitespace/index.html -->
<module name="FileTabCharacter"/> <module name="FileTabCharacter"/>
<!-- Miscellaneous other checks. --> <!-- Miscellaneous other checks. -->
<!-- See http://checkstyle.sf.net/config_misc.html --> <!-- See https://checkstyle.org/checks/misc/index.html -->
<module name="RegexpSingleline"> <module name="RegexpSingleline">
<property name="format" value="\s+$"/> <property name="format" value="\s+$"/>
<property name="minimum" value="0"/> <property name="minimum" value="0"/>
<property name="maximum" value="0"/> <property name="maximum" value="0"/>
<property name="message" value="Line has trailing spaces."/> <property name="message" value="Line has trailing spaces."/>
</module> </module>
<!-- Checks for Headers --> <!-- Checks for Headers -->
<!-- See http://checkstyle.sf.net/config_header.html --> <!-- See https://checkstyle.org/checks/header/index.html -->
<!-- <module name="Header"> --> <!-- <module name="Header"> -->
<!-- <property name="headerFile" value="${checkstyle.header.file}"/> --> <!-- <property name="headerFile" value="${checkstyle.header.file}"/> -->
<!-- <property name="fileExtensions" value="java"/> --> <!-- <property name="fileExtensions" value="java"/> -->
@ -79,25 +96,19 @@
<module name="TreeWalker"> <module name="TreeWalker">
<!-- Allow suppress annotations -->
<module name="SuppressWarningsHolder"/>
<!-- Checks for Javadoc comments. --> <!-- Checks for Javadoc comments. -->
<!-- See http://checkstyle.sf.net/config_javadoc.html --> <!-- See https://checkstyle.org/checks/javadoc/index.html -->
<module name="JavadocMethod"> <module name="InvalidJavadocPosition"/>
<property name="scope" value="package"/> <module name="JavadocMethod"/>
</module> <module name="JavadocType"/>
<module name="JavadocType">
<property name="scope" value="package"/>
</module>
<module name="JavadocVariable"> <module name="JavadocVariable">
<property name="scope" value="package"/> <property name="scope" value="public"/>
</module> </module>
<module name="JavadocStyle"/> <module name="JavadocStyle"/>
<module name="MissingJavadocMethod"/>
<!-- Checks for Naming Conventions. --> <!-- Checks for Naming Conventions. -->
<!-- See http://checkstyle.sf.net/config_naming.html --> <!-- See https://checkstyle.org/checks/naming/index.html -->
<module name="ConstantName"/> <module name="ConstantName"/>
<module name="LocalFinalVariableName"/> <module name="LocalFinalVariableName"/>
<module name="LocalVariableName"/> <module name="LocalVariableName"/>
@ -108,29 +119,22 @@
<module name="StaticVariableName"/> <module name="StaticVariableName"/>
<module name="TypeName"/> <module name="TypeName"/>
<!-- Checks for imports --> <!-- Checks for imports -->
<!-- See http://checkstyle.sf.net/config_import.html --> <!-- See https://checkstyle.org/checks/imports/index.html -->
<module name="AvoidStarImport"/> <module name="AvoidStarImport"/>
<module name="IllegalImport"/> <!-- defaults to sun.* packages --> <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
<module name="RedundantImport"/> <module name="RedundantImport"/>
<module name="UnusedImports"/> <module name="UnusedImports">
<property name="processJavadoc" value="false"/>
</module>
<!-- Checks for Size Violations. --> <!-- Checks for Size Violations. -->
<!-- See http://checkstyle.sf.net/config_sizes.html --> <!-- See https://checkstyle.org/checks/sizes/index.html -->
<module name="LineLength">
<property name="max" value="100"/>
</module>
<module name="MethodLength"/> <module name="MethodLength"/>
<module name="ParameterNumber"> <module name="ParameterNumber"/>
<property name="max" value="10"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
<!-- Checks for whitespace --> <!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html --> <!-- See https://checkstyle.org/checks/whitespace/index.html -->
<module name="EmptyForIteratorPad"/> <module name="EmptyForIteratorPad"/>
<module name="GenericWhitespace"/> <module name="GenericWhitespace"/>
<module name="MethodParamPad"/> <module name="MethodParamPad"/>
@ -142,48 +146,42 @@
<module name="WhitespaceAfter"/> <module name="WhitespaceAfter"/>
<module name="WhitespaceAround"/> <module name="WhitespaceAround"/>
<!-- Modifier Checks --> <!-- Modifier Checks -->
<!-- See http://checkstyle.sf.net/config_modifiers.html --> <!-- See https://checkstyle.org/checks/modifier/index.html -->
<module name="ModifierOrder"/> <module name="ModifierOrder"/>
<module name="RedundantModifier"/> <module name="RedundantModifier"/>
<!-- Checks for blocks. You know, those {}'s --> <!-- Checks for blocks. You know, those {}'s -->
<!-- See http://checkstyle.sf.net/config_blocks.html --> <!-- See https://checkstyle.org/checks/blocks/index.html -->
<module name="AvoidNestedBlocks"/> <module name="AvoidNestedBlocks"/>
<module name="EmptyBlock"/> <module name="EmptyBlock"/>
<module name="LeftCurly"/> <module name="LeftCurly"/>
<module name="NeedBraces"/> <module name="NeedBraces"/>
<module name="RightCurly"/> <module name="RightCurly"/>
<!-- Checks for common coding problems --> <!-- Checks for common coding problems -->
<!-- See http://checkstyle.sf.net/config_coding.html --> <!-- See https://checkstyle.org/checks/coding/index.html -->
<module name="AvoidInlineConditionals"/>
<module name="EmptyStatement"/> <module name="EmptyStatement"/>
<module name="EqualsHashCode"/> <module name="EqualsHashCode"/>
<module name="HiddenField"> <module name="HiddenField"/>
<property name="tokens" value="VARIABLE_DEF"/>
</module>
<module name="IllegalInstantiation"/> <module name="IllegalInstantiation"/>
<module name="InnerAssignment"/> <module name="InnerAssignment"/>
<module name="MagicNumber"/> <module name="MagicNumber"/>
<module name="MissingSwitchDefault"/> <module name="MissingSwitchDefault"/>
<!-- <module name="RedundantThrows"/> --> <module name="MultipleVariableDeclarations"/>
<module name="SimplifyBooleanExpression"/> <module name="SimplifyBooleanExpression"/>
<module name="SimplifyBooleanReturn"/> <module name="SimplifyBooleanReturn"/>
<!-- Checks for class design --> <!-- Checks for class design -->
<!-- See http://checkstyle.sf.net/config_design.html --> <!-- See https://checkstyle.org/checks/design/index.html -->
<module name="DesignForExtension"/>
<module name="FinalClass"/> <module name="FinalClass"/>
<module name="HideUtilityClassConstructor"/> <module name="HideUtilityClassConstructor"/>
<module name="InterfaceIsType"/> <module name="InterfaceIsType"/>
<module name="VisibilityModifier"/> <module name="VisibilityModifier"/>
<!-- Miscellaneous other checks. --> <!-- Miscellaneous other checks. -->
<!-- See http://checkstyle.sf.net/config_misc.html --> <!-- See https://checkstyle.org/checks/misc/index.html -->
<module name="ArrayTypeStyle"/> <module name="ArrayTypeStyle"/>
<module name="FinalParameters"/> <module name="FinalParameters"/>
<module name="TodoComment"/> <module name="TodoComment"/>
@ -191,4 +189,4 @@
</module> </module>
</module> </module>

View File

@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.2//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_2.dtd">
<suppressions>
<!-- Ignore Auto generated files -->
<suppress files="[/\\]hirs[/\\]utils[/\\]xjc[/\\]" checks=".*" />
<suppress files="ProvisionerTpm2.java" checks=".*" />
<!-- HIRS_Utils -->
<!-- This ignores checking all public variable for a javadoc -->
<suppress files="SwidTagConstants.java" checks="LineLength" />
<suppress files="SwidTagConstants.java" checks="JavadocVariable" />
</suppressions>

View File

@ -2,6 +2,7 @@ import java.util.concurrent.TimeUnit
plugins { plugins {
id "java" id "java"
id "com.netflix.nebula.ospackage" version "11.4.0" id "com.netflix.nebula.ospackage" version "11.4.0"
id 'checkstyle'
} }
// Get version from main project gradle // Get version from main project gradle
def packVersion = properties.get("packageVersion"); def packVersion = properties.get("packageVersion");
@ -26,6 +27,26 @@ dependencies {
ext.configDir = new File(projectDir, 'config') ext.configDir = new File(projectDir, 'config')
checkstyle {
toolVersion = '10.12.7'
configFile file("${rootDir}/config/checkstyle/checkstyle.xml")
}
// https://github.com/checkstyle/checkstyle/issues/14211#issuecomment-1884129948
configurations.checkstyle {
resolutionStrategy.capabilitiesResolution.withCapability("com.google.collections:google-collections") {
select("com.google.guava:guava:0")
}
}
checkstyleMain {
source ='src/main/java'
}
tasks.withType(Checkstyle) {
reports {
xml.required = false
html.required = true
}
}
jar { jar {
// Keep jar clean: // Keep jar clean:
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF' exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'

View File

@ -1,12 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<suppress files="Main.java" checks="HideUtilityClassConstructor" />
<suppress checks="MagicNumber" files=".*[/\\]src[/\\]test[/\\]+" />
<suppress checks="FinalParameters" files=".*[/\\]src[/\\]test[/\\]+" />
<suppress checks="JavadocPackage" files=".*[/\\]src[/\\]test[/\\]+" />
</suppressions>

View File

@ -2,6 +2,7 @@ plugins {
id "java" id "java"
id 'com.netflix.nebula.ospackage' version '11.4.0' id 'com.netflix.nebula.ospackage' version '11.4.0'
id 'com.intershop.gradle.jaxb' version '5.1.0' id 'com.intershop.gradle.jaxb' version '5.1.0'
id 'checkstyle'
} }
// Get version from main project gradle // Get version from main project gradle
@ -44,6 +45,26 @@ test {
testLogging.showStandardStreams true testLogging.showStandardStreams true
} }
checkstyle {
toolVersion = '10.12.7'
configFile file("${rootDir}/config/checkstyle/checkstyle.xml")
}
// https://github.com/checkstyle/checkstyle/issues/14211#issuecomment-1884129948
configurations.checkstyle {
resolutionStrategy.capabilitiesResolution.withCapability("com.google.collections:google-collections") {
select("com.google.guava:guava:0")
}
}
checkstyleMain {
source ='src/main/java'
}
tasks.withType(Checkstyle) {
reports {
xml.required = false
html.required = true
}
}
jar { jar {
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF' exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE