Skip to content

Commit 8628fc0

Browse files
authored
Merge pull request #826 from sigstore/change-roles-a-bit
Move known roles in TUF
2 parents e0da6bc + 004f18a commit 8628fc0

File tree

8 files changed

+35
-49
lines changed

8 files changed

+35
-49
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,22 +70,22 @@ public String getIdentifier() {
7070

7171
@Override
7272
public Optional<Root> loadTrustedRoot() throws IOException {
73-
return loadRole(Role.Name.ROOT, Root.class);
73+
return loadRole(RootRole.ROOT, Root.class);
7474
}
7575

7676
@Override
7777
public Optional<Timestamp> loadTimestamp() throws IOException {
78-
return loadRole(Role.Name.TIMESTAMP, Timestamp.class);
78+
return loadRole(RootRole.TIMESTAMP, Timestamp.class);
7979
}
8080

8181
@Override
8282
public Optional<Snapshot> loadSnapshot() throws IOException {
83-
return loadRole(Role.Name.SNAPSHOT, Snapshot.class);
83+
return loadRole(RootRole.SNAPSHOT, Snapshot.class);
8484
}
8585

8686
@Override
8787
public Optional<Targets> loadTargets() throws IOException {
88-
return loadRole(Role.Name.TARGETS, Targets.class);
88+
return loadRole(RootRole.TARGETS, Targets.class);
8989
}
9090

9191
@Override
@@ -103,7 +103,7 @@ public void storeMeta(SignedTufMeta<?> timestamp) throws IOException {
103103
storeRole(timestamp);
104104
}
105105

106-
<T extends SignedTufMeta<?>> Optional<T> loadRole(Role.Name roleName, Class<T> tClass)
106+
<T extends SignedTufMeta<?>> Optional<T> loadRole(String roleName, Class<T> tClass)
107107
throws IOException {
108108
Path roleFile = repoBaseDir.resolve(roleName + ".json");
109109
if (!roleFile.toFile().exists()) {

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import com.google.common.base.Preconditions;
2323
import dev.sigstore.http.HttpClients;
2424
import dev.sigstore.http.ImmutableHttpParams;
25-
import dev.sigstore.tuf.model.Role;
2625
import dev.sigstore.tuf.model.Root;
2726
import dev.sigstore.tuf.model.SignedTufMeta;
27+
import dev.sigstore.tuf.model.TufMeta;
2828
import java.io.IOException;
2929
import java.net.MalformedURLException;
3030
import java.net.URL;
@@ -62,24 +62,23 @@ public Optional<MetaFetchResult<Root>> getRootAtVersion(int version)
6262
}
6363

6464
@Override
65-
public <T extends SignedTufMeta> Optional<MetaFetchResult<T>> getMeta(Role.Name role, Class<T> t)
66-
throws IOException, FileExceedsMaxLengthException {
65+
public <T extends SignedTufMeta<? extends TufMeta>> Optional<MetaFetchResult<T>> getMeta(
66+
String role, Class<T> t) throws IOException, FileExceedsMaxLengthException {
6767
return getMeta(getFileName(role, null), t, null);
6868
}
6969

7070
@Override
71-
public <T extends SignedTufMeta> Optional<MetaFetchResult<T>> getMeta(
72-
Role.Name role, int version, Class<T> t, Integer maxSize)
71+
public <T extends SignedTufMeta<? extends TufMeta>> Optional<MetaFetchResult<T>> getMeta(
72+
String role, int version, Class<T> t, Integer maxSize)
7373
throws IOException, FileExceedsMaxLengthException {
7474
Preconditions.checkArgument(version > 0, "version should be positive, got: %s", version);
7575
return getMeta(getFileName(role, version), t, maxSize);
7676
}
7777

78-
private static String getFileName(Role.Name role, @Nullable Integer version) {
79-
String normalizeRoleName = role.name().toLowerCase(Locale.ROOT);
78+
private static String getFileName(String role, @Nullable Integer version) {
8079
return version == null
81-
? normalizeRoleName + ".json"
82-
: String.format(Locale.ROOT, "%d.%s.json", version, normalizeRoleName);
80+
? role + ".json"
81+
: String.format(Locale.ROOT, "%d.%s.json", version, role);
8382
}
8483

8584
<T extends SignedTufMeta> Optional<MetaFetchResult<T>> getMeta(

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
*/
1616
package dev.sigstore.tuf;
1717

18-
import dev.sigstore.tuf.model.Role;
1918
import dev.sigstore.tuf.model.Root;
2019
import dev.sigstore.tuf.model.SignedTufMeta;
20+
import dev.sigstore.tuf.model.TufMeta;
2121
import java.io.IOException;
2222
import java.util.Optional;
2323

@@ -49,8 +49,8 @@ Optional<MetaFetchResult<Root>> getRootAtVersion(int version)
4949
* @throws FileExceedsMaxLengthException if the role meta at source exceeds client specified max
5050
* size
5151
*/
52-
<T extends SignedTufMeta> Optional<MetaFetchResult<T>> getMeta(Role.Name name, Class<T> roleType)
53-
throws IOException, FileExceedsMaxLengthException;
52+
<T extends SignedTufMeta<? extends TufMeta>> Optional<MetaFetchResult<T>> getMeta(
53+
String name, Class<T> roleType) throws IOException, FileExceedsMaxLengthException;
5454

5555
/**
5656
* Fetches the specified role meta from the source
@@ -64,8 +64,8 @@ <T extends SignedTufMeta> Optional<MetaFetchResult<T>> getMeta(Role.Name name, C
6464
* @throws FileExceedsMaxLengthException if the role meta at source exceeds client specified max
6565
* size
6666
*/
67-
<T extends SignedTufMeta> Optional<MetaFetchResult<T>> getMeta(
68-
Role.Name name, int version, Class<T> roleType, Integer maxSize)
67+
<T extends SignedTufMeta<? extends TufMeta>> Optional<MetaFetchResult<T>> getMeta(
68+
String name, int version, Class<T> roleType, Integer maxSize)
6969
throws IOException, FileExceedsMaxLengthException;
7070

7171
byte[] fetchResource(String filename, int maxLength)

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,11 @@ Root updateRoot()
156156
throwIfExpired(expires);
157157
// 5.3.11) If the timestamp and / or snapshot keys have been rotated, then delete the trusted
158158
// timestamp and snapshot metadata files.
159-
if (hasNewKeys(preUpdateSnapshotRole, trustedRoot.getSignedMeta().getRole(Role.Name.SNAPSHOT))
159+
if (hasNewKeys(
160+
preUpdateSnapshotRole, trustedRoot.getSignedMeta().getRoles().get(RootRole.SNAPSHOT))
160161
|| hasNewKeys(
161-
preUpdateTimestampRole, trustedRoot.getSignedMeta().getRole(Role.Name.TIMESTAMP))) {
162+
preUpdateTimestampRole,
163+
trustedRoot.getSignedMeta().getRoles().get(RootRole.TIMESTAMP))) {
162164
localStore.clearMetaDueToKeyRotation();
163165
}
164166
return trustedRoot;
@@ -174,16 +176,13 @@ private boolean hasNewKeys(RootRole oldRole, RootRole newRole) {
174176
return !newRole.getKeyids().stream().allMatch(key -> oldRole.getKeyids().contains(key));
175177
}
176178

177-
void verifyDelegate(Root trustedRoot, SignedTufMeta delegate)
179+
void verifyDelegate(Root trustedRoot, SignedTufMeta<? extends TufMeta> delegate)
178180
throws SignatureVerificationException, IOException, NoSuchAlgorithmException,
179-
InvalidKeySpecException, InvalidKeyException {
181+
InvalidKeySpecException {
180182
verifyDelegate(
181183
delegate.getSignatures(),
182184
trustedRoot.getSignedMeta().getKeys(),
183-
trustedRoot
184-
.getSignedMeta()
185-
.getRole(
186-
Role.Name.valueOf(delegate.getSignedMeta().getType().toUpperCase(Locale.ROOT))),
185+
trustedRoot.getSignedMeta().getRoles().get(delegate.getSignedMeta().getType()),
187186
delegate.getCanonicalSignedBytes());
188187
}
189188

@@ -269,7 +268,7 @@ Optional<Timestamp> updateTimestamp(Root root)
269268
// 1) download the timestamp.json bytes.
270269
var timestamp =
271270
fetcher
272-
.getMeta(Role.Name.TIMESTAMP, Timestamp.class)
271+
.getMeta(RootRole.TIMESTAMP, Timestamp.class)
273272
.orElseThrow(() -> new FileNotFoundException("timestamp.json", fetcher.getSource()))
274273
.getMetaResource();
275274

@@ -305,7 +304,7 @@ Snapshot updateSnapshot(Root root, Timestamp timestamp)
305304
int timestampSnapshotVersion = timestamp.getSignedMeta().getSnapshotMeta().getVersion();
306305
var snapshotResult =
307306
fetcher.getMeta(
308-
Role.Name.SNAPSHOT,
307+
RootRole.SNAPSHOT,
309308
timestampSnapshotVersion,
310309
Snapshot.class,
311310
timestamp.getSignedMeta().getSnapshotMeta().getLengthOrDefault());
@@ -395,7 +394,7 @@ Targets updateTargets(Root root, Snapshot snapshot)
395394
SnapshotMeta.SnapshotTarget targetMeta = snapshot.getSignedMeta().getTargetMeta("targets.json");
396395
var targetsResultMaybe =
397396
fetcher.getMeta(
398-
Role.Name.TARGETS,
397+
RootRole.TARGETS,
399398
targetMeta.getVersion(),
400399
Targets.class,
401400
targetMeta.getLengthOrDefault());

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package dev.sigstore.tuf.model;
1717

1818
import java.util.List;
19-
import java.util.Locale;
2019

2120
/**
2221
* TUF uses roles to define the set of actions a party can perform. The concept of roles allows TUF
@@ -27,18 +26,6 @@
2726
*/
2827
public interface Role {
2928

30-
enum Name {
31-
ROOT,
32-
SNAPSHOT,
33-
TIMESTAMP,
34-
TARGETS;
35-
36-
@Override
37-
public String toString() {
38-
return super.toString().toLowerCase(Locale.ROOT);
39-
}
40-
}
41-
4229
/** A list of trusted keys for this role. */
4330
List<String> getKeyids();
4431

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,4 @@ public interface RootMeta extends TufMeta {
5454
* href="https://theupdateframework.io/metadata/#root-metadata-rootjson">role</a>.
5555
*/
5656
Map<String, RootRole> getRoles();
57-
58-
default RootRole getRole(Role.Name name) {
59-
return getRoles().get(name.toString());
60-
}
6157
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,9 @@
2727
*/
2828
@Gson.TypeAdapters
2929
@Value.Immutable
30-
public interface RootRole extends Role {}
30+
public interface RootRole extends Role {
31+
String ROOT = "root";
32+
String SNAPSHOT = "snapshot";
33+
String TIMESTAMP = "timestamp";
34+
String TARGETS = "targets";
35+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ public interface TimestampMeta extends TufMeta {
3333
Map<String, SnapshotMeta.SnapshotTarget> getMeta();
3434

3535
default SnapshotMeta.SnapshotTarget getSnapshotMeta() {
36-
return getMeta().get(Role.Name.SNAPSHOT.toString() + ".json");
36+
return getMeta().get(RootRole.SNAPSHOT + ".json");
3737
}
3838
}

0 commit comments

Comments
 (0)