Skip to content

Commit 2fa3bef

Browse files
zaihaoyinchloeyin
zaihaoyin
authored andcommitted
refactor:add envelope type as sign/verify parameter
Signed-off-by: zaihaoyin <[email protected]>
1 parent 33b4d2e commit 2fa3bef

File tree

6 files changed

+17
-21
lines changed

6 files changed

+17
-21
lines changed

notation.go

+3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ type Signer interface {
6969

7070
// VerifyOptions contains parameters for Verifier.Verify.
7171
type VerifyOptions struct {
72+
// SignatureMediaType is the envelope type of the signature.
73+
// Currently only `application/jose+json`` is supported.
74+
// TODO: in the future, application/cose will also be supported.
7275
SignatureMediaType string
7376
}
7477

signature/plugin.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"time"
1010

1111
"github.com/notaryproject/notation-core-go/signature"
12-
"github.com/notaryproject/notation-core-go/signature/jws"
1312
"github.com/notaryproject/notation-go"
1413
"github.com/notaryproject/notation-go/plugin"
1514
)
@@ -26,16 +25,14 @@ type pluginSigner struct {
2625
// by delegating the one or more operations to the named plugin,
2726
// as defined in
2827
// https://github.com/notaryproject/notaryproject/blob/main/specs/plugin-extensibility.md#signing-interfaces.
29-
func NewSignerPlugin(runner plugin.Runner, keyID string, pluginConfig map[string]string) (notation.Signer, error) {
28+
func NewSignerPlugin(runner plugin.Runner, keyID string, pluginConfig map[string]string, envelopeMediaType string) (notation.Signer, error) {
3029
if runner == nil {
3130
return nil, errors.New("nil plugin runner")
3231
}
3332
if keyID == "" {
3433
return nil, errors.New("nil signing keyID")
3534
}
3635

37-
// TODO: pass media type as a parameter.
38-
envelopeMediaType := jws.MediaTypeEnvelope
3936
if err := ValidateEnvelopeMediaType(envelopeMediaType); err != nil {
4037
return nil, err
4138
}

signature/provider.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
)
1212

1313
// builtInPluginMetaData is the metadata used by builtinProvider.
14-
var builtInPluginMetaData = plugin.Metadata{
14+
var builtInPluginMetaData = &plugin.Metadata{
1515
SupportedContractVersions: []string{plugin.ContractVersion},
1616
Capabilities: []plugin.Capability{plugin.CapabilitySignatureGenerator},
1717
Name: "built-in",
@@ -49,7 +49,7 @@ func (*builtinProvider) metadata() *plugin.Metadata {
4949
// The only properties that are really relevant
5050
// are the supported contract version and the capabilities.
5151
// All other are just filled with meaningful data.
52-
return &builtInPluginMetaData
52+
return builtInPluginMetaData
5353
}
5454

5555
// Run implements the plugin workflow.

signature/signer.go

+3-7
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@ import (
77
"errors"
88
"fmt"
99

10-
"github.com/notaryproject/notation-core-go/signature/jws"
1110
"github.com/notaryproject/notation-go"
1211
)
1312

1413
// NewSignerFromFiles creates a signer from key, certificate files
1514
// TODO: Add tests for this method. https://github.com/notaryproject/notation-go/issues/80
16-
func NewSignerFromFiles(keyPath, certPath string) (notation.Signer, error) {
15+
func NewSignerFromFiles(keyPath, certPath, envelopeMediaType string) (notation.Signer, error) {
1716
if keyPath == "" {
1817
return nil, errors.New("key path not specified")
1918
}
@@ -40,17 +39,14 @@ func NewSignerFromFiles(keyPath, certPath string) (notation.Signer, error) {
4039
}
4140

4241
// create signer
43-
return NewSigner(cert.PrivateKey, certs)
42+
return NewSigner(cert.PrivateKey, certs, envelopeMediaType)
4443
}
4544

4645
// NewSigner creates a signer with the recommended signing method and a signing key bundled
4746
// with a certificate chain.
4847
// The relation of the provided signing key and its certificate chain is not verified,
4948
// and should be verified by the caller.
50-
func NewSigner(key crypto.PrivateKey, certChain []*x509.Certificate) (notation.Signer, error) {
51-
// TODO: pass media type as a parameter
52-
envelopeMediaType := jws.MediaTypeEnvelope
53-
49+
func NewSigner(key crypto.PrivateKey, certChain []*x509.Certificate, envelopeMediaType string) (notation.Signer, error) {
5450
builtinProvider, err := newBuiltinProvider(key, certChain)
5551
if err != nil {
5652
return nil, err

signature/signer_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func testSignerFromFile(t *testing.T, keyCert *keyCertPair, envelopeType, dir st
118118
if err != nil {
119119
t.Fatalf("prepareTestKeyCertFile() failed: %v", err)
120120
}
121-
s, err := NewSignerFromFiles(keyPath, certPath)
121+
s, err := NewSignerFromFiles(keyPath, certPath, envelopeType)
122122
if err != nil {
123123
t.Fatalf("NewSignerFromFiles() failed: %v", err)
124124
}
@@ -161,7 +161,7 @@ func TestSignWithTimestamp(t *testing.T) {
161161
for _, envelopeType := range signature.RegisteredEnvelopeTypes() {
162162
for _, keyCert := range keyCertPairCollections {
163163
t.Run(fmt.Sprintf("envelopeType=%v_keySpec=%v", envelopeType, keyCert.keySpecName), func(t *testing.T) {
164-
s, err := NewSigner(keyCert.key, keyCert.certs)
164+
s, err := NewSigner(keyCert.key, keyCert.certs, envelopeType)
165165
if err != nil {
166166
t.Fatalf("NewSigner() error = %v", err)
167167
}
@@ -192,7 +192,7 @@ func TestSignWithoutExpiry(t *testing.T) {
192192
for _, envelopeType := range signature.RegisteredEnvelopeTypes() {
193193
for _, keyCert := range keyCertPairCollections {
194194
t.Run(fmt.Sprintf("envelopeType=%v_keySpec=%v", envelopeType, keyCert.keySpecName), func(t *testing.T) {
195-
s, err := NewSigner(keyCert.key, keyCert.certs)
195+
s, err := NewSigner(keyCert.key, keyCert.certs, envelopeType)
196196
if err != nil {
197197
t.Fatalf("NewSigner() error = %v", err)
198198
}
@@ -246,7 +246,7 @@ func TestExternalSigner_Sign(t *testing.T) {
246246
for _, envelopeType := range signature.RegisteredEnvelopeTypes() {
247247
for _, keyCert := range keyCertPairCollections {
248248
externalRunner := newMockProvider(keyCert.key, keyCert.certs, testKeyID)
249-
s, err := NewSignerPlugin(externalRunner, testKeyID, nil)
249+
s, err := NewSignerPlugin(externalRunner, testKeyID, nil, envelopeType)
250250
if err != nil {
251251
t.Fatalf("NewSigner() error = %v", err)
252252
}
@@ -266,7 +266,7 @@ func TestExternalSigner_SignEnvelope(t *testing.T) {
266266
t.Run(fmt.Sprintf("envelopeType=%v_keySpec=%v", envelopeType, keyCert.keySpecName), func(t *testing.T) {
267267
externalRunner := newMockEnvelopeProvider(keyCert.key, keyCert.certs, testKeyID)
268268
p := newExternalProvider(externalRunner, testKeyID)
269-
s, err := NewSignerPlugin(p, testKeyID, nil)
269+
s, err := NewSignerPlugin(p, testKeyID, nil, envelopeType)
270270
if err != nil {
271271
t.Fatalf("NewSigner() error = %v", err)
272272
}
@@ -338,7 +338,7 @@ func basicVerification(t *testing.T, sig []byte, envelopeType string, trust *x50
338338
}
339339

340340
func validateSignWithCerts(t *testing.T, envelopeType string, key crypto.PrivateKey, certs []*x509.Certificate) {
341-
s, err := NewSigner(key, certs)
341+
s, err := NewSigner(key, certs, envelopeType)
342342
if err != nil {
343343
t.Fatalf("NewSigner() error = %v", err)
344344
}

signature/verifier_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func testVerifierFromFile(t *testing.T, keyCert *keyCertPair, envelopeType, dir
2222
if err != nil {
2323
t.Fatalf("prepare key cert file failed: %v", err)
2424
}
25-
s, err := NewSignerFromFiles(keyPath, certPath)
25+
s, err := NewSignerFromFiles(keyPath, certPath, envelopeType)
2626
if err != nil {
2727
t.Fatalf("NewSignerFromFiles() failed: %v", err)
2828
}
@@ -67,7 +67,7 @@ func TestVerifyWithCertChain(t *testing.T) {
6767
for _, envelopeType := range signature.RegisteredEnvelopeTypes() {
6868
for _, keyCert := range keyCertPairCollections {
6969
t.Run(fmt.Sprintf("envelopeType=%v_keySpec=%v", envelopeType, keyCert.keySpecName), func(t *testing.T) {
70-
s, err := NewSigner(keyCert.key, keyCert.certs)
70+
s, err := NewSigner(keyCert.key, keyCert.certs, envelopeType)
7171
if err != nil {
7272
t.Fatalf("NewSigner() error = %v", err)
7373
}

0 commit comments

Comments
 (0)