Skip to content

Commit d741f8a

Browse files
oncillajuagargi
authored andcommitted
control: pluggable segment signer (scionproto#4460)
Make the segment signer pluggable. This decouples the beacon extender from the trust signer implementation and allows plugging in different implementations.
1 parent 9d8159c commit d741f8a

File tree

6 files changed

+32
-15
lines changed

6 files changed

+32
-15
lines changed

control/beaconing/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ go_library(
2525
"//pkg/private/prom:go_default_library",
2626
"//pkg/private/serrors:go_default_library",
2727
"//pkg/private/util:go_default_library",
28+
"//pkg/proto/crypto:go_default_library",
2829
"//pkg/segment:go_default_library",
2930
"//pkg/segment/extensions/digest:go_default_library",
3031
"//pkg/segment/extensions/epic:go_default_library",
@@ -37,7 +38,6 @@ go_library(
3738
"//private/segment/verifier:go_default_library",
3839
"//private/topology:go_default_library",
3940
"//private/tracing:go_default_library",
40-
"//private/trust:go_default_library",
4141
"@com_github_opentracing_opentracing_go//:go_default_library",
4242
],
4343
)

control/beaconing/extender.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,28 @@ import (
2626
"github.com/scionproto/scion/pkg/metrics"
2727
"github.com/scionproto/scion/pkg/private/serrors"
2828
"github.com/scionproto/scion/pkg/private/util"
29+
cryptopb "github.com/scionproto/scion/pkg/proto/crypto"
2930
seg "github.com/scionproto/scion/pkg/segment"
3031
"github.com/scionproto/scion/pkg/segment/extensions/digest"
3132
"github.com/scionproto/scion/pkg/segment/extensions/epic"
3233
"github.com/scionproto/scion/pkg/slayers/path"
33-
"github.com/scionproto/scion/private/trust"
3434
)
3535

3636
// SignerGen generates signers and returns their expiration time.
3737
type SignerGen interface {
3838
// Generate generates a signer it.
39-
Generate(ctx context.Context) (trust.Signer, error)
39+
Generate(ctx context.Context) (Signer, error)
40+
}
41+
42+
type Signer interface {
43+
Sign(context.Context, []byte, ...[]byte) (*cryptopb.SignedMessage, error)
44+
GetExpiration() time.Time
45+
}
46+
47+
type SignerGenFunc func(ctx context.Context) (Signer, error)
48+
49+
func (f SignerGenFunc) Generate(ctx context.Context) (Signer, error) {
50+
return f(ctx)
4051
}
4152

4253
// Extender extends path segments.
@@ -104,14 +115,14 @@ func (s *DefaultExtender) Extend(
104115
}
105116
// Make sure the hop expiration time is not longer than the signer expiration time.
106117
expTime := s.MaxExpTime()
107-
if ts.Add(path.ExpTimeToDuration(expTime)).After(signer.Expiration) {
118+
if ts.Add(path.ExpTimeToDuration(expTime)).After(signer.GetExpiration()) {
108119
metrics.GaugeSet(s.SegmentExpirationDeficient, 1)
109120
var err error
110-
expTime, err = path.ExpTimeFromDuration(signer.Expiration.Sub(ts))
121+
expTime, err = path.ExpTimeFromDuration(signer.GetExpiration().Sub(ts))
111122
if err != nil {
112123
return serrors.WrapStr(
113124
"calculating expiry time from signer expiration time", err,
114-
"signer_expiration", signer.Expiration,
125+
"signer_expiration", signer.GetExpiration(),
115126
)
116127
}
117128
} else {

control/beaconing/writer_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ type testSignerGen struct {
349349
Signer trust.Signer
350350
}
351351

352-
func (s testSignerGen) Generate(ctx context.Context) (trust.Signer, error) {
352+
func (s testSignerGen) Generate(ctx context.Context) (beaconing.Signer, error) {
353353
return s.Signer, nil
354354
}
355355

control/cmd/control/main.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -780,13 +780,15 @@ func realMain(ctx context.Context) error {
780780
},
781781
SegmentRegister: beaconinggrpc.Registrar{Dialer: dialer},
782782
BeaconStore: beaconStore,
783-
SignerGen: signer.SignerGen,
784-
Inspector: inspector,
785-
Metrics: metrics,
786-
DRKeyEngine: drkeyEngine,
787-
MACGen: macGen,
788-
NextHopper: topo,
789-
StaticInfo: func() *beaconing.StaticInfoCfg { return staticInfo },
783+
SignerGen: beaconing.SignerGenFunc(func(ctx context.Context) (beaconing.Signer, error) {
784+
return signer.SignerGen.Generate(ctx)
785+
}),
786+
Inspector: inspector,
787+
Metrics: metrics,
788+
DRKeyEngine: drkeyEngine,
789+
MACGen: macGen,
790+
NextHopper: topo,
791+
StaticInfo: func() *beaconing.StaticInfoCfg { return staticInfo },
790792

791793
OriginationInterval: globalCfg.BS.OriginationInterval.Duration,
792794
PropagationInterval: globalCfg.BS.PropagationInterval.Duration,

pkg/experimental/hiddenpath/beaconwriter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ type testSignerGen struct {
356356
Signer trust.Signer
357357
}
358358

359-
func (s testSignerGen) Generate(ctx context.Context) (trust.Signer, error) {
359+
func (s testSignerGen) Generate(ctx context.Context) (beaconing.Signer, error) {
360360
return s.Signer, nil
361361
}
362362

private/trust/signer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ func (s Signer) validate(ctx context.Context, now time.Time) error {
135135
return nil
136136
}
137137

138+
func (s Signer) GetExpiration() time.Time {
139+
return s.Expiration
140+
}
141+
138142
func (s Signer) Equal(o Signer) bool {
139143
return s.IA.Equal(o.IA) &&
140144
bytes.Equal(s.SubjectKeyID, o.SubjectKeyID) &&

0 commit comments

Comments
 (0)