From 9a34b5236d82f86dfbacaa9b06bdff4d810a2381 Mon Sep 17 00:00:00 2001 From: Morgan Kleene Date: Wed, 9 Apr 2025 09:08:59 -0400 Subject: [PATCH 1/3] fix: deal with the extra layer of hex --- sdk/src/main/java/io/opentdf/platform/sdk/TDF.java | 2 +- sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java b/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java index faa082e6..692f2ca1 100644 --- a/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java +++ b/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java @@ -596,7 +596,7 @@ public TDFObject createTDF(InputStream payload, assertion.appliesToState = assertionConfig.appliesToState.toString(); var assertionHashAsHex = assertion.hash(); - var assertionHash = Hex.decodeHex(assertionHashAsHex); + var assertionHash = tdfConfig.hexEncodeRootAndSegmentHashes ? assertionHashAsHex.getBytes(StandardCharsets.UTF_8) : Hex.decodeHex(assertionHashAsHex); byte[] completeHash = new byte[aggregateHash.size() + assertionHash.length]; System.arraycopy(aggregateHash.toByteArray(), 0, completeHash, 0, aggregateHash.size()); System.arraycopy(assertionHash, 0, completeHash, aggregateHash.size(), assertionHash.length); diff --git a/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java b/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java index e4031bcb..bd5178f6 100644 --- a/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java +++ b/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java @@ -500,11 +500,21 @@ public void testCreateTDFWithMimeType() throws Exception { @Test public void legacyTDFRoundTrips() throws DecoderException, IOException, ExecutionException, JOSEException, InterruptedException, ParseException, NoSuchAlgorithmException { final String mimeType = "application/pdf"; + var assertionConfig1 = new AssertionConfig(); + assertionConfig1.id = "assertion1"; + assertionConfig1.type = AssertionConfig.Type.BaseAssertion; + assertionConfig1.scope = AssertionConfig.Scope.TrustedDataObj; + assertionConfig1.appliesToState = AssertionConfig.AppliesToState.Unencrypted; + assertionConfig1.statement = new AssertionConfig.Statement(); + assertionConfig1.statement.format = "base64binary"; + assertionConfig1.statement.schema = "text"; + assertionConfig1.statement.value = "ICAgIDxlZGoOkVkaD4="; Config.TDFConfig config = Config.newTDFConfig( Config.withAutoconfigure(false), Config.withKasInformation(getRSAKASInfos()), Config.withTargetMode("4.2.1"), + Config.withAssertionConfig(assertionConfig1), Config.withMimeType(mimeType)); byte[] data = new byte[129]; From fddc02bfbdaa113747a536321cc8e2d63996d016 Mon Sep 17 00:00:00 2001 From: Morgan Kleene Date: Wed, 9 Apr 2025 09:24:54 -0400 Subject: [PATCH 2/3] assert on the assertion --- sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java b/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java index bd5178f6..8a03dd09 100644 --- a/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java +++ b/sdk/src/test/java/io/opentdf/platform/sdk/TDFTest.java @@ -547,6 +547,15 @@ public void legacyTDFRoundTrips() throws DecoderException, IOException, Executio reader.readPayload(dataOutputStream); assertThat(reader.getManifest().payload.mimeType).isEqualTo(mimeType); assertArrayEquals(data, dataOutputStream.toByteArray(), "extracted data does not match"); + var manifest = reader.getManifest(); + var assertions = manifest.assertions; + assertThat(assertions.size()).isEqualTo(1); + var assertion = assertions.get(0); + assertThat(assertion.id).isEqualTo("assertion1"); + assertThat(assertion.statement.format).isEqualTo("base64binary"); + assertThat(assertion.statement.schema).isEqualTo("text"); + assertThat(assertion.statement.value).isEqualTo("ICAgIDxlZGoOkVkaD4="); + assertThat(assertion.type).isEqualTo(AssertionConfig.Type.BaseAssertion.toString()); } @Nonnull From 14d8914394e015295d036c420de262c6f85434a4 Mon Sep 17 00:00:00 2001 From: Morgan Kleene Date: Wed, 9 Apr 2025 10:00:42 -0400 Subject: [PATCH 3/3] Update TDF.java --- sdk/src/main/java/io/opentdf/platform/sdk/TDF.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java b/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java index 692f2ca1..f74b3cb6 100644 --- a/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java +++ b/sdk/src/main/java/io/opentdf/platform/sdk/TDF.java @@ -596,7 +596,9 @@ public TDFObject createTDF(InputStream payload, assertion.appliesToState = assertionConfig.appliesToState.toString(); var assertionHashAsHex = assertion.hash(); - var assertionHash = tdfConfig.hexEncodeRootAndSegmentHashes ? assertionHashAsHex.getBytes(StandardCharsets.UTF_8) : Hex.decodeHex(assertionHashAsHex); + var assertionHash = tdfConfig.hexEncodeRootAndSegmentHashes + ? assertionHashAsHex.getBytes(StandardCharsets.UTF_8) + : Hex.decodeHex(assertionHashAsHex); byte[] completeHash = new byte[aggregateHash.size() + assertionHash.length]; System.arraycopy(aggregateHash.toByteArray(), 0, completeHash, 0, aggregateHash.size()); System.arraycopy(assertionHash, 0, completeHash, aggregateHash.size(), assertionHash.length);