diff --git a/tools/tcg_rim_tool/src/main/java/hirs/swid/utils/TimestampArgumentValidator.java b/tools/tcg_rim_tool/src/main/java/hirs/swid/utils/TimestampArgumentValidator.java index 96966580..1b1be43d 100644 --- a/tools/tcg_rim_tool/src/main/java/hirs/swid/utils/TimestampArgumentValidator.java +++ b/tools/tcg_rim_tool/src/main/java/hirs/swid/utils/TimestampArgumentValidator.java @@ -29,7 +29,7 @@ public class TimestampArgumentValidator { public boolean isValid() { if (isExactlyOneFormat(args)) { if (args.get(0).equalsIgnoreCase("RFC3852")) { - if (args.size() == 2) { + if (args.size() > 1) { if (isRfc3852FileValid(args.get(1))) { return true; } else { @@ -40,7 +40,7 @@ public class TimestampArgumentValidator { return false; } } else if (args.get(0).equalsIgnoreCase("RFC3339")) { - if (args.size() == 2) { + if (args.size() > 1) { if (isRfc3339Format(args.get(1))) { return true; } else { @@ -94,7 +94,8 @@ public class TimestampArgumentValidator { try { Instant instant = Instant.parse(timestamp); } catch (DateTimeParseException e) { - System.out.println("Invalid RFC3339 timestamp given: " + timestamp); + System.out.println("Invalid RFC3339 timestamp given, " + + "expected yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); return false; } return true; diff --git a/tools/tcg_rim_tool/src/test/java/hirs/swid/TestSwidTagGateway.java b/tools/tcg_rim_tool/src/test/java/hirs/swid/TestSwidTagGateway.java index 09b75977..a1768ef7 100644 --- a/tools/tcg_rim_tool/src/test/java/hirs/swid/TestSwidTagGateway.java +++ b/tools/tcg_rim_tool/src/test/java/hirs/swid/TestSwidTagGateway.java @@ -17,6 +17,8 @@ public class TestSwidTagGateway { private final String BASE_USER_CERT = "generated_user_cert.swidtag"; private final String BASE_USER_CERT_EMBED = "generated_user_cert_embed.swidtag"; private final String BASE_DEFAULT_CERT = "generated_default_cert.swidtag"; + private final String BASE_RFC3339_TIMESTAMP = "generated_timestamp_rfc3339.swidtag"; + private final String BASE_RFC3852_TIMESTAMP = "generated_timestamp_rfc3852.swidtag"; private final String ATTRIBUTES_FILE = TestSwidTagGateway.class.getClassLoader() .getResource("rim_fields.json").getPath(); private final String JKS_KEYSTORE_FILE = TestSwidTagGateway.class.getClassLoader() @@ -29,6 +31,8 @@ public class TestSwidTagGateway { .getResource("RimCertChain.pem").getPath(); private final String SUPPORT_RIM_FILE = TestSwidTagGateway.class.getClassLoader() .getResource("TpmLog.bin").getPath(); + private final String RFC3852_COUNTERSIGNATURE_FILE = TestSwidTagGateway.class.getClassLoader() + .getResource("counterSignature.file").getPath(); private InputStream expectedFile; @BeforeClass @@ -87,7 +91,7 @@ public class TestSwidTagGateway { /** * This test corresponds to the arguments: - * -c base -l TpmLog.bin + * -c base -l TpmLog.bin -d */ @Test public void testCreateBaseDefaultCert() { @@ -100,6 +104,40 @@ public class TestSwidTagGateway { Assert.assertTrue(validator.validateSwidTag(DEFAULT_OUTPUT)); } + /** + * This test corresponds to the arguments: + * -c base -l TpmLog.bin -d --timestamp rfc3339 2023-01-01T00:00:00Z + */ + @Test + public void testCreateTimestampRfc3339() { + gateway.setDefaultCredentials(true); + gateway.setJksTruststoreFile(JKS_KEYSTORE_FILE); + gateway.setTimestampFormat("RFC3339"); + gateway.setTimestampArgument("2023-01-01T00:00:00Z"); + gateway.generateSwidTag(DEFAULT_OUTPUT); + expectedFile = TestSwidTagGateway.class.getClassLoader() + .getResourceAsStream(BASE_RFC3339_TIMESTAMP); + Assert.assertTrue(compareFileBytesToExpectedFile(DEFAULT_OUTPUT)); + Assert.assertTrue(validator.validateSwidTag(DEFAULT_OUTPUT)); + } + + /** + * This test corresponds to the arguments: + * -c base -l TpmLog.bin -d --timestamp rfc3852 countersignature.file + */ + @Test + public void testCreateTimestampRfc3852() { + gateway.setDefaultCredentials(true); + gateway.setJksTruststoreFile(JKS_KEYSTORE_FILE); + gateway.setTimestampFormat("RFC3852"); + gateway.setTimestampArgument(RFC3852_COUNTERSIGNATURE_FILE); + gateway.generateSwidTag(DEFAULT_OUTPUT); + expectedFile = TestSwidTagGateway.class.getClassLoader() + .getResourceAsStream(BASE_RFC3852_TIMESTAMP); + Assert.assertTrue(compareFileBytesToExpectedFile(DEFAULT_OUTPUT)); + Assert.assertTrue(validator.validateSwidTag(DEFAULT_OUTPUT)); + } + /** * This test corresponds to the arguments: * -v diff --git a/tools/tcg_rim_tool/src/test/resources/counterSignature.file b/tools/tcg_rim_tool/src/test/resources/counterSignature.file new file mode 100644 index 00000000..9daeafb9 --- /dev/null +++ b/tools/tcg_rim_tool/src/test/resources/counterSignature.file @@ -0,0 +1 @@ +test diff --git a/tools/tcg_rim_tool/src/test/resources/generated_timestamp_rfc3339.swidtag b/tools/tcg_rim_tool/src/test/resources/generated_timestamp_rfc3339.swidtag new file mode 100644 index 00000000..cee8c323 --- /dev/null +++ b/tools/tcg_rim_tool/src/test/resources/generated_timestamp_rfc3339.swidtag @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + DJMc0n3VHHwU+F3HNpiY/l3EMcjRZAQOYlrjhD5v9qE= + + + + j8sqX9NGt8DAPOvbhXKAT648BGdPnQnblai1PYDUryE= + + + N8QB5dMLnSLaDuCO8Ds/9nPlJGzsF1HJCthEXDXPrMTpfWBwmsVTqtNwoGzHIXlx8HDdDcfTLa3j +3rfFmDZNMqv6+6jjjJZerpN6XyWHGaVjVuPiNGmafE5SajTg53+6KlWXTGs3kcbbV5cTtjASz/A0 +cz9gBYTwYXmWA3+V0USLA0MNYzPkKp83eDnizbrkGx824NU9qG1DetVFfZqotWoTGJ1Wz4J8D1yR +wUILS0DbtZalCNVv3kw9raIRKQ/CjlDztfP1SgiNuXu6IaVZKoVG9HGp3s8pQvFPHr0HD2sNrAkx +twKcg3XIzGrTc22Y2TYw9Dk3NxumQSp4kve6ow== + + 2fdeb8e7d030a2209daa01861a964fedecf2bcc1 + + + + + + + + + + diff --git a/tools/tcg_rim_tool/src/test/resources/generated_timestamp_rfc3852.swidtag b/tools/tcg_rim_tool/src/test/resources/generated_timestamp_rfc3852.swidtag new file mode 100644 index 00000000..d78d0b8c --- /dev/null +++ b/tools/tcg_rim_tool/src/test/resources/generated_timestamp_rfc3852.swidtag @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + DJMc0n3VHHwU+F3HNpiY/l3EMcjRZAQOYlrjhD5v9qE= + + + + KC51x7iXfEjDYEieFP1lktWNGP6eCWpXe5/sr3V8PlU= + + + M6a+lIU7vIQmO0By/WCtocI4qzk4R4oXtduEpeyOfIH/xOTKkDI7E17v6dywLd7psZSKMPw8lRqp +AZCBvsU6zDXzLsAakO2ydmH2i5POWNArUq+GRw9KDnNPZWanmRSqjpV2mEjfx84IF2MaqXDPng1q +JrzKN8f00uHM+eOmXktyiBhJR9gT+htceMzAEzk8qeWCg6o6wFMx0JR1lUbGOXe070DtZCR7I0iQ +0iZfnNzMzuRf2GHw6aKnSyGwdr1pUeoxEVGR5jkY8a7mT/0mt+8kVq4FL1gikrSOzvotoZ+dGb0Q +JjzA2IgK+ti/Tc/FpLYKefXQwcVSUY+CD/HCvA== + + 2fdeb8e7d030a2209daa01861a964fedecf2bcc1 + + + + + + + + + +