Skip to content

Commit fe5a7d3

Browse files
authored
Add new type rfc3161 for RFC 3161 timestamp responses (sigstore#324)
Signed-off-by: Appu Goundan <appu@google.com>
1 parent 600815e commit fe5a7d3

File tree

18 files changed

+1292
-10
lines changed

18 files changed

+1292
-10
lines changed

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ lint:
5757
gosec:
5858
$(GOBIN)/gosec ./...
5959

60+
gen: $(GENSRC)
61+
6062
rekor-cli: $(SRCS)
6163
CGO_ENABLED=0 go build -ldflags $(CLI_LDFLAGS) -o rekor-cli ./cmd/rekor-cli
6264

cmd/rekor-cli/app/pflags.go

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
intoto_v001 "github.com/sigstore/rekor/pkg/types/intoto/v0.0.1"
4040
jar_v001 "github.com/sigstore/rekor/pkg/types/jar/v0.0.1"
4141
rekord_v001 "github.com/sigstore/rekor/pkg/types/rekord/v0.0.1"
42+
rfc3161_v001 "github.com/sigstore/rekor/pkg/types/rfc3161/v0.0.1"
4243
rpm_v001 "github.com/sigstore/rekor/pkg/types/rpm/v0.0.1"
4344
)
4445

@@ -139,7 +140,7 @@ func validateArtifactPFlags(uuidValid, indexValid bool) error {
139140
if signature == "" && typeStr == "rekord" {
140141
return errors.New("--signature is required when --artifact is used")
141142
}
142-
if publicKey == "" && typeStr != "jar" {
143+
if publicKey == "" && typeStr != "jar" && typeStr != "rfc3161" {
143144
return errors.New("--public-key is required when --artifact is used")
144145
}
145146
}
@@ -247,6 +248,31 @@ func CreateIntotoFromPFlags() (models.ProposedEntry, error) {
247248
return &returnVal, nil
248249
}
249250

251+
func CreateRFC3161FromPFlags() (models.ProposedEntry, error) {
252+
//TODO: how to select version of item to create
253+
returnVal := models.Rfc3161{}
254+
255+
rfc3161 := viper.GetString("artifact")
256+
b, err := ioutil.ReadFile(filepath.Clean(rfc3161))
257+
if err != nil {
258+
return nil, fmt.Errorf("error reading public key file: %w", err)
259+
}
260+
261+
b64 := strfmt.Base64(b)
262+
re := rfc3161_v001.V001Entry{
263+
Rfc3161Obj: models.Rfc3161V001Schema{
264+
Tsr: &models.Rfc3161V001SchemaTsr{
265+
Content: &b64,
266+
},
267+
},
268+
}
269+
270+
returnVal.Spec = re.Rfc3161Obj
271+
returnVal.APIVersion = swag.String(re.APIVersion())
272+
273+
return &returnVal, nil
274+
}
275+
250276
func CreateRpmFromPFlags() (models.ProposedEntry, error) {
251277
//TODO: how to select version of item to create
252278
returnVal := models.Rpm{}
@@ -464,16 +490,17 @@ func (t *typeFlag) String() string {
464490

465491
func (t *typeFlag) Set(s string) error {
466492
set := map[string]struct{}{
467-
"rekord": {},
468-
"rpm": {},
469-
"jar": {},
470-
"intoto": {},
493+
"rekord": {},
494+
"rpm": {},
495+
"jar": {},
496+
"intoto": {},
497+
"rfc3161": {},
471498
}
472499
if _, ok := set[s]; ok {
473500
t.value = s
474501
return nil
475502
}
476-
return fmt.Errorf("value specified is invalid: [%s] supported values are: [rekord, rpm, jar, intoto]", s)
503+
return fmt.Errorf("value specified is invalid: [%s] supported values are: [rekord, rpm, jar, intoto, rfc3161]", s)
477504
}
478505

479506
type pkiFormatFlag struct {

cmd/rekor-cli/app/upload.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ var uploadCmd = &cobra.Command{
9595
if err != nil {
9696
return nil, err
9797
}
98+
case "rfc3161":
99+
entry, err = CreateRFC3161FromPFlags()
100+
if err != nil {
101+
return nil, err
102+
}
98103
default:
99104
return nil, errors.New("unknown type specified")
100105
}

cmd/rekor-server/app/serve.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ import (
3434
jar_v001 "github.com/sigstore/rekor/pkg/types/jar/v0.0.1"
3535
"github.com/sigstore/rekor/pkg/types/rekord"
3636
rekord_v001 "github.com/sigstore/rekor/pkg/types/rekord/v0.0.1"
37+
"github.com/sigstore/rekor/pkg/types/rfc3161"
38+
rfc3161_v001 "github.com/sigstore/rekor/pkg/types/rfc3161/v0.0.1"
3739
"github.com/sigstore/rekor/pkg/types/rpm"
3840
rpm_v001 "github.com/sigstore/rekor/pkg/types/rpm/v0.0.1"
3941
)
@@ -72,10 +74,11 @@ var serveCmd = &cobra.Command{
7274

7375
// these trigger loading of package and therefore init() methods to run
7476
pluggableTypeMap := map[string]string{
75-
rekord.KIND: rekord_v001.APIVERSION,
76-
rpm.KIND: rpm_v001.APIVERSION,
77-
jar.KIND: jar_v001.APIVERSION,
78-
intoto.KIND: intoto_v001.APIVERSION,
77+
rekord.KIND: rekord_v001.APIVERSION,
78+
rpm.KIND: rpm_v001.APIVERSION,
79+
jar.KIND: jar_v001.APIVERSION,
80+
intoto.KIND: intoto_v001.APIVERSION,
81+
rfc3161.KIND: rfc3161_v001.APIVERSION,
7982
}
8083

8184
for k, v := range pluggableTypeMap {

openapi.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,23 @@ definitions:
351351
- spec
352352
additionalProperties: false
353353

354+
rfc3161:
355+
type: object
356+
description: RFC3161 Timestamp
357+
allOf:
358+
- $ref: '#/definitions/ProposedEntry'
359+
- properties:
360+
apiVersion:
361+
type: string
362+
pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
363+
spec:
364+
type: object
365+
$ref: 'pkg/types/rfc3161/rfc3161_schema.json'
366+
required:
367+
- apiVersion
368+
- spec
369+
additionalProperties: false
370+
354371
LogEntry:
355372
type: object
356373
additionalProperties:

pkg/generated/models/proposed_entry.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/generated/models/rfc3161.go

Lines changed: 210 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/generated/models/rfc3161_schema.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)