Skip to content

Commit cbc0836

Browse files
authored
Merge pull request #1062 from sigstore/cli-rekor-v2
cli: Add working directory and enable Rekor v2
2 parents f05d0a4 + be1abe8 commit cbc0836

File tree

3 files changed

+65
-23
lines changed

3 files changed

+65
-23
lines changed

sigstore-cli/src/main/java/dev/sigstore/cli/ConformanceServer.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -88,28 +88,16 @@ private static void handleExecute(HttpServletRequest request, HttpServletRespons
8888
System.setErr(errPs);
8989

9090
Path cwd = Paths.get(executeRequest.cwd);
91-
java.util.List<String> resolvedArgs = new java.util.ArrayList<>();
91+
java.util.List<String> args = new java.util.ArrayList<>();
9292

9393
for (int i = 0; i < executeRequest.args.length; i++) {
9494
String arg = executeRequest.args[i];
95-
96-
if (arg.equals("--bundle") && i + 1 < executeRequest.args.length) {
97-
resolvedArgs.add(arg);
98-
String filePath = executeRequest.args[++i];
99-
resolvedArgs.add(cwd.resolve(filePath).toAbsolutePath().toString());
100-
} else if (i == executeRequest.args.length - 1 && !arg.startsWith("-")) {
101-
if (arg.contains(":")) {
102-
resolvedArgs.add(arg);
103-
} else {
104-
resolvedArgs.add(cwd.resolve(arg).toAbsolutePath().toString());
105-
}
106-
} else {
107-
resolvedArgs.add(arg);
108-
}
95+
args.add(arg);
10996
}
97+
args.add("--working-directory");
98+
args.add(cwd.toAbsolutePath().toString());
11099

111-
int exitCode =
112-
new picocli.CommandLine(new Sigstore()).execute(resolvedArgs.toArray(new String[0]));
100+
int exitCode = new picocli.CommandLine(new Sigstore()).execute(args.toArray(new String[0]));
113101

114102
Map<String, Object> responseMap =
115103
Map.of(

sigstore-cli/src/main/java/dev/sigstore/cli/Sign.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package dev.sigstore.cli;
1717

1818
import dev.sigstore.KeylessSigner;
19+
import dev.sigstore.SigningConfigProvider;
1920
import dev.sigstore.TrustedRootProvider;
2021
import dev.sigstore.oidc.client.OidcClients;
2122
import dev.sigstore.oidc.client.TokenStringOidcClient;
@@ -70,19 +71,52 @@ static class Target {
7071
String stagingWithTufUrlOverride;
7172
}
7273

74+
@Option(
75+
names = {"--signing-config"},
76+
description = "a custom signing config",
77+
required = false)
78+
Path signingConfig;
79+
7380
@Option(
7481
names = {"--identity-token"},
7582
description = "the OIDC identity token to use",
7683
required = false)
7784
String identityToken;
7885

86+
@Option(
87+
names = {"--working-directory"},
88+
description = "the working directory",
89+
required = false)
90+
Path workingDirectory;
91+
7992
@Override
8093
public Integer call() throws Exception {
94+
if (workingDirectory != null) {
95+
artifact = workingDirectory.resolve(artifact);
96+
bundleFile = workingDirectory.resolve(bundleFile);
97+
if (signingConfig != null) {
98+
signingConfig = workingDirectory.resolve(signingConfig);
99+
}
100+
if (target != null && target.trustedRoot != null) {
101+
target.trustedRoot = workingDirectory.resolve(target.trustedRoot);
102+
}
103+
}
81104
KeylessSigner.Builder signerBuilder;
82105
if (target == null) {
83-
signerBuilder = new KeylessSigner.Builder().sigstorePublicDefaults();
106+
signerBuilder = new KeylessSigner.Builder().sigstorePublicDefaults().enableRekorV2(true);
107+
} else if ((target.trustedRoot != null && signingConfig == null)
108+
|| (target.trustedRoot == null && signingConfig != null)) {
109+
throw new IllegalArgumentException(
110+
"Trusted root and signing config are both required if one is provided");
111+
} else if (target.trustedRoot != null && signingConfig != null) {
112+
signerBuilder =
113+
new KeylessSigner.Builder()
114+
.sigstoreStagingDefaults()
115+
.enableRekorV2(true)
116+
.trustedRootProvider(TrustedRootProvider.from(target.trustedRoot))
117+
.signingConfigProvider(SigningConfigProvider.from(signingConfig));
84118
} else if (target.staging) {
85-
signerBuilder = new KeylessSigner.Builder().sigstoreStagingDefaults();
119+
signerBuilder = new KeylessSigner.Builder().sigstoreStagingDefaults().enableRekorV2(true);
86120
} else if (target.publicGoodWithTufUrlOverride != null) {
87121
var tufClientBuilder =
88122
SigstoreTufClient.builder()
@@ -93,6 +127,7 @@ public Integer call() throws Exception {
93127
signerBuilder =
94128
KeylessSigner.builder()
95129
.sigstorePublicDefaults()
130+
.enableRekorV2(true)
96131
.trustedRootProvider(TrustedRootProvider.from(tufClientBuilder));
97132
} else if (target.stagingWithTufUrlOverride != null) {
98133
var tufClientBuilder =
@@ -104,6 +139,7 @@ public Integer call() throws Exception {
104139
signerBuilder =
105140
KeylessSigner.builder()
106141
.sigstoreStagingDefaults()
142+
.enableRekorV2(true)
107143
.trustedRootProvider(TrustedRootProvider.from(tufClientBuilder));
108144
} else {
109145
throw new IllegalStateException("Unable to initialize signer");

sigstore-cli/src/main/java/dev/sigstore/cli/Verify.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,30 @@ static class Policy {
107107
String certificateIssuer;
108108
}
109109

110+
@Option(
111+
names = {"--working-directory"},
112+
description = "the working directory",
113+
required = false)
114+
Path workingDirectory;
115+
110116
@Override
111117
public Integer call() throws Exception {
112-
byte[] digest =
113-
artifact.startsWith(SHA256_PREFIX)
114-
? Hex.decodeHex(artifact.substring(SHA256_PREFIX.length()))
115-
: asByteSource(Path.of(artifact).toFile()).hash(Hashing.sha256()).asBytes();
118+
byte[] digest;
119+
if (artifact.startsWith(SHA256_PREFIX)) {
120+
digest = Hex.decodeHex(artifact.substring(SHA256_PREFIX.length()));
121+
} else {
122+
if (workingDirectory != null) {
123+
artifact = workingDirectory.resolve(artifact).toString();
124+
}
125+
digest = asByteSource(Path.of(artifact).toFile()).hash(Hashing.sha256()).asBytes();
126+
}
127+
128+
if (workingDirectory != null) {
129+
bundleFile = workingDirectory.resolve(bundleFile);
130+
if (target != null && target.trustedRoot != null) {
131+
target.trustedRoot = workingDirectory.resolve(target.trustedRoot);
132+
}
133+
}
116134

117135
Bundle bundle = Bundle.from(bundleFile, StandardCharsets.UTF_8);
118136

0 commit comments

Comments
 (0)