Skip to content

Commit 25dbcf5

Browse files
authored
reuse dsse signature wrappers instead of having a copy (sigstore#912)
Signed-off-by: Bob Callaway <bcallaway@google.com>
1 parent fb4ed40 commit 25dbcf5

File tree

2 files changed

+8
-63
lines changed

2 files changed

+8
-63
lines changed

pkg/types/intoto/v0.0.1/entry.go

Lines changed: 4 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import (
4343
"github.com/sigstore/rekor/pkg/types"
4444
"github.com/sigstore/rekor/pkg/types/intoto"
4545
"github.com/sigstore/sigstore/pkg/signature"
46-
"github.com/sigstore/sigstore/pkg/signature/options"
46+
dsse_verifier "github.com/sigstore/sigstore/pkg/signature/dsse"
4747
)
4848

4949
const (
@@ -232,26 +232,12 @@ func (v *V001Entry) validate() error {
232232
if err != nil {
233233
return err
234234
}
235-
dsseVerifier, err := dsse.NewEnvelopeSigner(&verifier{
236-
v: vfr,
237-
pub: pk,
238-
})
239-
if err != nil {
240-
return err
241-
}
242-
243-
if v.IntotoObj.Content.Envelope == "" {
244-
return nil
245-
}
235+
dsseVerifier := dsse_verifier.WrapVerifier(vfr)
246236

247-
if err := json.Unmarshal([]byte(v.IntotoObj.Content.Envelope), &v.env); err != nil {
237+
if err := dsseVerifier.VerifySignature(strings.NewReader(v.IntotoObj.Content.Envelope), nil); err != nil {
248238
return err
249239
}
250-
251-
if _, err := dsseVerifier.Verify(&v.env); err != nil {
252-
return err
253-
}
254-
return nil
240+
return json.Unmarshal([]byte(v.IntotoObj.Content.Envelope), &v.env)
255241
}
256242

257243
// AttestationKey returns the digest of the attestation that was uploaded, to be used to lookup the attestation from storage
@@ -275,38 +261,6 @@ func (v *V001Entry) AttestationKeyValue() (string, []byte) {
275261
return attKey, attBytes
276262
}
277263

278-
type verifier struct {
279-
s signature.Signer
280-
v signature.Verifier
281-
pub crypto.PublicKey
282-
}
283-
284-
func (v *verifier) KeyID() (string, error) {
285-
return "", nil
286-
}
287-
288-
func (v *verifier) Public() crypto.PublicKey {
289-
return v.pub
290-
}
291-
292-
func (v *verifier) Sign(data []byte) (sig []byte, err error) {
293-
if v.s == nil {
294-
return nil, errors.New("nil signer")
295-
}
296-
sig, err = v.s.SignMessage(bytes.NewReader(data), options.WithCryptoSignerOpts(crypto.SHA256))
297-
if err != nil {
298-
return nil, err
299-
}
300-
return sig, nil
301-
}
302-
303-
func (v *verifier) Verify(data, sig []byte) error {
304-
if v.v == nil {
305-
return errors.New("nil verifier")
306-
}
307-
return v.v.VerifySignature(bytes.NewReader(sig), bytes.NewReader(data))
308-
}
309-
310264
func (v V001Entry) CreateFromArtifactProperties(_ context.Context, props types.ArtifactProperties) (models.ProposedEntry, error) {
311265
returnVal := models.Intoto{}
312266

pkg/types/intoto/v0.0.1/entry_test.go

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import (
4646
"github.com/sigstore/rekor/pkg/generated/models"
4747
"github.com/sigstore/rekor/pkg/types"
4848
"github.com/sigstore/sigstore/pkg/signature"
49+
dsse_signer "github.com/sigstore/sigstore/pkg/signature/dsse"
4950
"go.uber.org/goleak"
5051
)
5152

@@ -71,23 +72,13 @@ func envelope(t *testing.T, k *ecdsa.PrivateKey, payload, payloadType string) st
7172
if err != nil {
7273
t.Fatal(err)
7374
}
74-
signer, err := in_toto.NewDSSESigner(&verifier{
75-
s: s,
76-
pub: k.Public(),
77-
})
78-
if err != nil {
79-
t.Fatal(err)
80-
}
81-
dsseEnv, err := signer.SignPayload([]byte(payload))
82-
if err != nil {
83-
t.Fatal(err)
84-
}
85-
b, err := json.Marshal(dsseEnv)
75+
wrappedSigner := dsse_signer.WrapSigner(s, string(payloadType))
76+
dsseEnv, err := wrappedSigner.SignMessage(strings.NewReader(payload))
8677
if err != nil {
8778
t.Fatal(err)
8879
}
8980

90-
return string(b)
81+
return string(dsseEnv)
9182
}
9283

9384
func TestV001Entry_Unmarshal(t *testing.T) {

0 commit comments

Comments
 (0)