Skip to content

Commit b65ddd9

Browse files
committed
Update tuf updater api surface
- Expose updateMeta and downloadTarget for conformance - Also don't persist derived attributes in TufMeta Signed-off-by: Appu Goundan <[email protected]>
1 parent 8e91247 commit b65ddd9

File tree

7 files changed

+36
-17
lines changed

7 files changed

+36
-17
lines changed

sigstore-java/src/main/java/dev/sigstore/tuf/Updater.java

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import dev.sigstore.encryption.Keys;
2323
import dev.sigstore.encryption.signers.Verifiers;
2424
import dev.sigstore.tuf.model.*;
25+
import dev.sigstore.tuf.model.TargetMeta.TargetData;
2526
import java.io.IOException;
2627
import java.nio.charset.StandardCharsets;
2728
import java.security.InvalidKeyException;
@@ -97,7 +98,7 @@ public void update()
9798
downloadTargets(trustedMetaStore.getTargets());
9899
}
99100

100-
void updateMeta() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
101+
public void updateMeta() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
101102
updateRoot();
102103
var oldTimestamp = trustedMetaStore.findTimestamp();
103104
updateTimestamp();
@@ -112,6 +113,15 @@ void updateMeta() throws IOException, NoSuchAlgorithmException, InvalidKeySpecEx
112113
updateTargets();
113114
}
114115

116+
public void downloadTarget(String targetName)
117+
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
118+
var targetData = trustedMetaStore.getTargets().getSignedMeta().getTargets().get(targetName);
119+
if (targetData == null) {
120+
throw new TargetMetadataMissingException(targetName);
121+
}
122+
downloadTarget(targetName, targetData);
123+
}
124+
115125
// https://theupdateframework.github.io/specification/latest/#detailed-client-workflow
116126
void updateRoot()
117127
throws IOException, RoleExpiredException, NoSuchAlgorithmException, InvalidKeySpecException,
@@ -304,7 +314,6 @@ void updateTimestamp()
304314
localTimestamp.getSignedMeta().getVersion(), timestamp.getSignedMeta().getVersion());
305315
}
306316
if (localTimestamp.getSignedMeta().getVersion() == timestamp.getSignedMeta().getVersion()) {
307-
trustedMetaStore.setTimestamp(localTimestamp);
308317
return;
309318
}
310319
}
@@ -459,24 +468,28 @@ void downloadTargets(Targets targets)
459468
throw new TargetMetadataMissingException(targetName);
460469
}
461470
TargetMeta.TargetData targetData = entry.getValue();
462-
// 9) Download target up to length specified in bytes. verify against hash.
463-
String versionedTargetName;
464-
if (targetData.getHashes().getSha512() != null) {
465-
versionedTargetName = targetData.getHashes().getSha512() + "." + targetName;
466-
} else {
467-
versionedTargetName = targetData.getHashes().getSha256() + "." + targetName;
468-
}
471+
downloadTarget(targetName, targetData);
472+
}
473+
}
469474

470-
var targetBytes = targetFetcher.fetchResource(versionedTargetName, targetData.getLength());
471-
if (targetBytes == null) {
472-
throw new FileNotFoundException(targetName, targetFetcher.getSource());
473-
}
474-
verifyHashes(entry.getKey(), targetBytes, targetData.getHashes());
475+
void downloadTarget(String targetName, TargetData targetData) throws IOException {
476+
// 9) Download target up to length specified in bytes. verify against hash.
477+
String versionedTargetName;
478+
if (targetData.getHashes().getSha512() != null) {
479+
versionedTargetName = targetData.getHashes().getSha512() + "." + targetName;
480+
} else {
481+
versionedTargetName = targetData.getHashes().getSha256() + "." + targetName;
482+
}
475483

476-
// when persisting targets use the targetname without sha512 prefix
477-
// https://theupdateframework.github.io/specification/latest/index.html#fetch-target
478-
targetStore.writeTarget(targetName, targetBytes);
484+
var targetBytes = targetFetcher.fetchResource(versionedTargetName, targetData.getLength());
485+
if (targetBytes == null) {
486+
throw new FileNotFoundException(targetName, targetFetcher.getSource());
479487
}
488+
verifyHashes(targetName, targetBytes, targetData.getHashes());
489+
490+
// when persisting targets use the targetname without sha512 prefix
491+
// https://theupdateframework.github.io/specification/latest/index.html#fetch-target
492+
targetStore.writeTarget(targetName, targetBytes);
480493
}
481494

482495
@VisibleForTesting

sigstore-java/src/main/java/dev/sigstore/tuf/model/Root.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
@Value.Immutable
2525
public interface Root extends SignedTufMeta<RootMeta> {
2626
@Override
27+
@Gson.Ignore
2728
@Derived
2829
default RootMeta getSignedMeta() {
2930
return getSignedMeta(RootMeta.class);

sigstore-java/src/main/java/dev/sigstore/tuf/model/SignedTufMeta.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public interface SignedTufMeta<T extends TufMeta> {
3838

3939
/** An internal helper to translate raw signed json to a useable type. */
4040
@Derived
41+
@Gson.Ignore
4142
default T getSignedMeta(Class<T> type) {
4243
return GsonSupplier.GSON.get().fromJson(getRawSignedMeta(), type);
4344
}

sigstore-java/src/main/java/dev/sigstore/tuf/model/Snapshot.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
public interface Snapshot extends SignedTufMeta<SnapshotMeta> {
2626
@Override
2727
@Derived
28+
@Gson.Ignore
2829
default SnapshotMeta getSignedMeta() {
2930
return getSignedMeta(SnapshotMeta.class);
3031
}

sigstore-java/src/main/java/dev/sigstore/tuf/model/SnapshotMeta.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ interface SnapshotTarget {
5959

6060
/** The length in bytes of the given target's metadata, or a default if not present */
6161
@Derived
62+
@Gson.Ignore
6263
default Integer getLengthOrDefault() {
6364
return getLength().orElse(DEFAULT_MAX_LENGTH);
6465
}

sigstore-java/src/main/java/dev/sigstore/tuf/model/Targets.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
public interface Targets extends SignedTufMeta<TargetMeta> {
2626
@Override
2727
@Derived
28+
@Gson.Ignore
2829
default TargetMeta getSignedMeta() {
2930
return getSignedMeta(TargetMeta.class);
3031
}

sigstore-java/src/main/java/dev/sigstore/tuf/model/Timestamp.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public interface Timestamp extends SignedTufMeta<TimestampMeta> {
2626

2727
@Override
2828
@Derived
29+
@Gson.Ignore
2930
default TimestampMeta getSignedMeta() {
3031
return getSignedMeta(TimestampMeta.class);
3132
}

0 commit comments

Comments
 (0)