Skip to content

Commit 2196015

Browse files
Remove Pre-Durango TLS certificate parsing logic (#2831)
Co-authored-by: Stephen Buttolph <stephen@avalabs.org>
1 parent d003d29 commit 2196015

File tree

29 files changed

+144
-343
lines changed

29 files changed

+144
-343
lines changed

chains/manager.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package chains
66
import (
77
"context"
88
"crypto"
9-
"crypto/tls"
109
"errors"
1110
"fmt"
1211
"os"
@@ -173,7 +172,8 @@ type ChainConfig struct {
173172

174173
type ManagerConfig struct {
175174
SybilProtectionEnabled bool
176-
StakingTLSCert tls.Certificate // needed to sign snowman++ blocks
175+
StakingTLSSigner crypto.Signer
176+
StakingTLSCert *staking.Certificate
177177
StakingBLSKey *bls.SecretKey
178178
TracingEnabled bool
179179
// Must not be used unless [TracingEnabled] is true as this may be nil.
@@ -239,9 +239,6 @@ type manager struct {
239239
ids.Aliaser
240240
ManagerConfig
241241

242-
stakingSigner crypto.Signer
243-
stakingCert *staking.Certificate
244-
245242
// Those notified when a chain is created
246243
registrants []Registrant
247244

@@ -268,8 +265,6 @@ func New(config *ManagerConfig) Manager {
268265
return &manager{
269266
Aliaser: ids.NewAliaser(),
270267
ManagerConfig: *config,
271-
stakingSigner: config.StakingTLSCert.PrivateKey.(crypto.Signer),
272-
stakingCert: staking.CertificateFromX509(config.StakingTLSCert.Leaf),
273268
chains: make(map[ids.ID]handler.Handler),
274269
chainsQueue: buffer.NewUnboundedBlockingDeque[ChainParameters](initialQueueSize),
275270
unblockChainCreatorCh: make(chan struct{}),
@@ -725,8 +720,8 @@ func (m *manager) createAvalancheChain(
725720
MinimumPChainHeight: m.ApricotPhase4MinPChainHeight,
726721
MinBlkDelay: minBlockDelay,
727722
NumHistoricalBlocks: numHistoricalBlocks,
728-
StakingLeafSigner: m.stakingSigner,
729-
StakingCertLeaf: m.stakingCert,
723+
StakingLeafSigner: m.StakingTLSSigner,
724+
StakingCertLeaf: m.StakingTLSCert,
730725
},
731726
)
732727

@@ -1062,8 +1057,8 @@ func (m *manager) createSnowmanChain(
10621057
MinimumPChainHeight: m.ApricotPhase4MinPChainHeight,
10631058
MinBlkDelay: minBlockDelay,
10641059
NumHistoricalBlocks: numHistoricalBlocks,
1065-
StakingLeafSigner: m.stakingSigner,
1066-
StakingCertLeaf: m.stakingCert,
1060+
StakingLeafSigner: m.StakingTLSSigner,
1061+
StakingCertLeaf: m.StakingTLSCert,
10671062
},
10681063
)
10691064

indexer/examples/p-chain/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"time"
1010

1111
"github.com/ava-labs/avalanchego/indexer"
12-
"github.com/ava-labs/avalanchego/version"
1312
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
1413

1514
platformvmblock "github.com/ava-labs/avalanchego/vms/platformvm/block"
@@ -34,7 +33,7 @@ func main() {
3433
}
3534

3635
platformvmBlockBytes := container.Bytes
37-
proposerVMBlock, err := proposervmblock.Parse(container.Bytes, version.DefaultUpgradeTime)
36+
proposerVMBlock, err := proposervmblock.Parse(container.Bytes)
3837
if err == nil {
3938
platformvmBlockBytes = proposerVMBlock.Block()
4039
}

indexer/examples/x-chain-blocks/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"time"
1010

1111
"github.com/ava-labs/avalanchego/indexer"
12-
"github.com/ava-labs/avalanchego/version"
1312
"github.com/ava-labs/avalanchego/vms/proposervm/block"
1413
"github.com/ava-labs/avalanchego/wallet/chain/x"
1514
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
@@ -32,7 +31,7 @@ func main() {
3231
continue
3332
}
3433

35-
proposerVMBlock, err := block.Parse(container.Bytes, version.DefaultUpgradeTime)
34+
proposerVMBlock, err := block.Parse(container.Bytes)
3635
if err != nil {
3736
log.Fatalf("failed to parse proposervm block: %s\n", err)
3837
}

network/certs_test.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,17 @@ func init() {
5858
cert1, cert2, cert3,
5959
}
6060

61+
stakingCert1, err := staking.ParseCertificate(cert1.Leaf.Raw)
62+
if err != nil {
63+
panic(err)
64+
}
65+
stakingCert2, err := staking.ParseCertificate(cert2.Leaf.Raw)
66+
if err != nil {
67+
panic(err)
68+
}
69+
6170
ip = ips.NewClaimedIPPort(
62-
staking.CertificateFromX509(cert1.Leaf),
71+
stakingCert1,
6372
ips.IPPort{
6473
IP: net.IPv4(127, 0, 0, 1),
6574
Port: 9651,
@@ -68,7 +77,7 @@ func init() {
6877
nil, // signature
6978
)
7079
otherIP = ips.NewClaimedIPPort(
71-
staking.CertificateFromX509(cert2.Leaf),
80+
stakingCert2,
7281
ips.IPPort{
7382
IP: net.IPv4(127, 0, 0, 1),
7483
Port: 9651,
@@ -94,7 +103,8 @@ func getTLS(t *testing.T, index int) (ids.NodeID, *tls.Certificate, *tls.Config)
94103
}
95104

96105
tlsCert := tlsCerts[index]
97-
cert := staking.CertificateFromX509(tlsCert.Leaf)
106+
cert, err := staking.ParseCertificate(tlsCert.Leaf.Raw)
107+
require.NoError(t, err)
98108
nodeID := ids.NodeIDFromCert(cert)
99109
return nodeID, tlsCert, tlsConfigs[index]
100110
}

network/network.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,12 +272,6 @@ func NewNetwork(
272272
IPSigner: peer.NewIPSigner(config.MyIPPort, config.TLSKey, config.BLSKey),
273273
}
274274

275-
// Invariant: We delay the activation of durango during the TLS handshake to
276-
// avoid gossiping any TLS certs that anyone else in the network may
277-
// consider invalid. Recall that if a peer gossips an invalid cert, the
278-
// connection is terminated.
279-
durangoTime := version.GetDurangoTime(config.NetworkID)
280-
durangoTimeWithClockSkew := durangoTime.Add(config.MaxClockDifference)
281275
onCloseCtx, cancel := context.WithCancel(context.Background())
282276
n := &network{
283277
config: config,
@@ -288,8 +282,8 @@ func NewNetwork(
288282
inboundConnUpgradeThrottler: throttling.NewInboundConnUpgradeThrottler(log, config.ThrottlerConfig.InboundConnUpgradeThrottlerConfig),
289283
listener: listener,
290284
dialer: dialer,
291-
serverUpgrader: peer.NewTLSServerUpgrader(config.TLSConfig, metrics.tlsConnRejected, durangoTimeWithClockSkew),
292-
clientUpgrader: peer.NewTLSClientUpgrader(config.TLSConfig, metrics.tlsConnRejected, durangoTimeWithClockSkew),
285+
serverUpgrader: peer.NewTLSServerUpgrader(config.TLSConfig, metrics.tlsConnRejected),
286+
clientUpgrader: peer.NewTLSClientUpgrader(config.TLSConfig, metrics.tlsConnRejected),
293287

294288
onCloseCtx: onCloseCtx,
295289
onCloseCtxCancel: cancel,

network/network_test.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -403,9 +403,12 @@ func TestTrackVerifiesSignatures(t *testing.T) {
403403
nodeID, tlsCert, _ := getTLS(t, 1)
404404
require.NoError(network.config.Validators.AddStaker(constants.PrimaryNetworkID, nodeID, nil, ids.Empty, 1))
405405

406-
err := network.Track([]*ips.ClaimedIPPort{
406+
stakingCert, err := staking.ParseCertificate(tlsCert.Leaf.Raw)
407+
require.NoError(err)
408+
409+
err = network.Track([]*ips.ClaimedIPPort{
407410
ips.NewClaimedIPPort(
408-
staking.CertificateFromX509(tlsCert.Leaf),
411+
stakingCert,
409412
ips.IPPort{
410413
IP: net.IPv4(123, 132, 123, 123),
411414
Port: 10000,
@@ -558,15 +561,17 @@ func TestDialDeletesNonValidators(t *testing.T) {
558561
wg.Add(len(networks))
559562
for i, net := range networks {
560563
if i != 0 {
561-
err := net.Track([]*ips.ClaimedIPPort{
564+
stakingCert, err := staking.ParseCertificate(config.TLSConfig.Certificates[0].Leaf.Raw)
565+
require.NoError(err)
566+
567+
require.NoError(net.Track([]*ips.ClaimedIPPort{
562568
ips.NewClaimedIPPort(
563-
staking.CertificateFromX509(config.TLSConfig.Certificates[0].Leaf),
569+
stakingCert,
564570
ip.IPPort,
565571
ip.Timestamp,
566572
ip.TLSSignature,
567573
),
568-
})
569-
require.NoError(err)
574+
}))
570575
}
571576

572577
go func(net Network) {

network/peer/ip_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ import (
1919
func TestSignedIpVerify(t *testing.T) {
2020
tlsCert1, err := staking.NewTLSCert()
2121
require.NoError(t, err)
22-
cert1 := staking.CertificateFromX509(tlsCert1.Leaf)
23-
require.NoError(t, staking.ValidateCertificate(cert1))
22+
cert1, err := staking.ParseCertificate(tlsCert1.Leaf.Raw)
23+
require.NoError(t, err)
2424
tlsKey1 := tlsCert1.PrivateKey.(crypto.Signer)
2525
blsKey1, err := bls.NewSecretKey()
2626
require.NoError(t, err)
2727

2828
tlsCert2, err := staking.NewTLSCert()
2929
require.NoError(t, err)
30-
cert2 := staking.CertificateFromX509(tlsCert2.Leaf)
31-
require.NoError(t, staking.ValidateCertificate(cert2))
30+
cert2, err := staking.ParseCertificate(tlsCert2.Leaf.Raw)
31+
require.NoError(t, err)
3232

3333
now := time.Now()
3434

network/peer/peer.go

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,22 +1207,9 @@ func (p *peer) handlePeerList(msg *p2p.PeerList) {
12071207
close(p.onFinishHandshake)
12081208
}
12091209

1210-
// Invariant: We do not account for clock skew here, as the sender of the
1211-
// certificate is expected to account for clock skew during the activation
1212-
// of Durango.
1213-
durangoTime := version.GetDurangoTime(p.NetworkID)
1214-
beforeDurango := time.Now().Before(durangoTime)
12151210
discoveredIPs := make([]*ips.ClaimedIPPort, len(msg.ClaimedIpPorts)) // the peers this peer told us about
12161211
for i, claimedIPPort := range msg.ClaimedIpPorts {
1217-
var (
1218-
tlsCert *staking.Certificate
1219-
err error
1220-
)
1221-
if beforeDurango {
1222-
tlsCert, err = staking.ParseCertificate(claimedIPPort.X509Certificate)
1223-
} else {
1224-
tlsCert, err = staking.ParseCertificatePermissive(claimedIPPort.X509Certificate)
1225-
}
1212+
tlsCert, err := staking.ParseCertificate(claimedIPPort.X509Certificate)
12261213
if err != nil {
12271214
p.Log.Debug("message with invalid field",
12281215
zap.Stringer("nodeID", p.id),

network/peer/peer_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ func makeRawTestPeers(t *testing.T, trackedSubnets set.Set[ids.ID]) (*rawTestPee
6868

6969
tlsCert0, err := staking.NewTLSCert()
7070
require.NoError(err)
71-
cert0 := staking.CertificateFromX509(tlsCert0.Leaf)
71+
cert0, err := staking.ParseCertificate(tlsCert0.Leaf.Raw)
72+
require.NoError(err)
7273

7374
tlsCert1, err := staking.NewTLSCert()
7475
require.NoError(err)
75-
cert1 := staking.CertificateFromX509(tlsCert1.Leaf)
76+
cert1, err := staking.ParseCertificate(tlsCert1.Leaf.Raw)
77+
require.NoError(err)
7678

7779
nodeID0 := ids.NodeIDFromCert(cert0)
7880
nodeID1 := ids.NodeIDFromCert(cert1)

network/peer/test_peer.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ func StartTestPeer(
6666
clientUpgrader := NewTLSClientUpgrader(
6767
tlsConfg,
6868
prometheus.NewCounter(prometheus.CounterOpts{}),
69-
version.GetDurangoTime(networkID),
7069
)
7170

7271
peerID, conn, cert, err := clientUpgrader.Upgrade(conn)

0 commit comments

Comments
 (0)