Skip to content

Commit 3c09bde

Browse files
xaionaro@dx.centerxaionaro@dx.center
authored andcommitted
Replace fmt.Errorf with custom error types in pkg/gen/caps
1 parent c97db44 commit 3c09bde

2 files changed

Lines changed: 32 additions & 17 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package caps
2+
3+
// ErrCapabilityConflict is returned when capability flags violate
4+
// the mutual-dependency or exclusivity rules defined in the SPDM spec.
5+
type ErrCapabilityConflict struct {
6+
Msg string
7+
}
8+
9+
// Error implements the error interface.
10+
func (e *ErrCapabilityConflict) Error() string {
11+
return e.Msg
12+
}
13+
14+
// Unwrap implements the errors unwrapping interface.
15+
func (e *ErrCapabilityConflict) Unwrap() error {
16+
return nil
17+
}

pkg/gen/caps/validate.go

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package caps
22

3-
import "fmt"
4-
53
// ValidateResponderCaps checks that responder capability flags satisfy
64
// the mandatory dependencies defined in DSP0274 Section 10.4, Table 15.
75
func ValidateResponderCaps(c ResponderCaps) error {
@@ -20,19 +18,19 @@ func validateResponderSessionCaps(c ResponderCaps) error {
2018
// ENCRYPT_CAP and MAC_CAP must both be set or both clear.
2119
if hasEncrypt != hasMAC {
2220
if hasEncrypt {
23-
return fmt.Errorf("ENCRYPT_CAP requires MAC_CAP to also be set")
21+
return &ErrCapabilityConflict{Msg: "ENCRYPT_CAP requires MAC_CAP to also be set"}
2422
}
25-
return fmt.Errorf("MAC_CAP requires ENCRYPT_CAP to also be set")
23+
return &ErrCapabilityConflict{Msg: "MAC_CAP requires ENCRYPT_CAP to also be set"}
2624
}
2725

2826
// If ENCRYPT_CAP or MAC_CAP is set, KEY_EX_CAP or PSK_CAP must be set.
2927
if (hasEncrypt || hasMAC) && !c.HasKeyExCap() && !c.HasPSKCap() {
30-
return fmt.Errorf("ENCRYPT_CAP/MAC_CAP require KEY_EX_CAP or PSK_CAP")
28+
return &ErrCapabilityConflict{Msg: "ENCRYPT_CAP/MAC_CAP require KEY_EX_CAP or PSK_CAP"}
3129
}
3230

3331
// MEAS_FRESH_CAP requires MEAS_CAP (NoSig or Sig).
3432
if c.HasMeasFreshCap() && !c.HasMeasCap() {
35-
return fmt.Errorf("MEAS_FRESH_CAP requires MEAS_CAP")
33+
return &ErrCapabilityConflict{Msg: "MEAS_FRESH_CAP requires MEAS_CAP"}
3634
}
3735

3836
return nil
@@ -44,24 +42,24 @@ func validateResponderSessionCaps(c ResponderCaps) error {
4442
func validateResponderAuthCaps(c ResponderCaps) error {
4543
// CERT_CAP and PUB_KEY_ID_CAP are mutually exclusive.
4644
if c.HasCertCap() && c.HasPubKeyIDCap() {
47-
return fmt.Errorf("CERT_CAP and PUB_KEY_ID_CAP are mutually exclusive")
45+
return &ErrCapabilityConflict{Msg: "CERT_CAP and PUB_KEY_ID_CAP are mutually exclusive"}
4846
}
4947

5048
// CHAL_CAP requires CERT_CAP or PUB_KEY_ID_CAP.
5149
if c.HasChalCap() && !c.HasCertCap() && !c.HasPubKeyIDCap() {
52-
return fmt.Errorf("CHAL_CAP requires CERT_CAP or PUB_KEY_ID_CAP")
50+
return &ErrCapabilityConflict{Msg: "CHAL_CAP requires CERT_CAP or PUB_KEY_ID_CAP"}
5351
}
5452

5553
hasKeyEx := c.HasKeyExCap()
5654

5755
// MUT_AUTH_CAP requires KEY_EX_CAP or PSK_CAP.
5856
if c.HasMutAuthCap() && !hasKeyEx && !c.HasPSKCap() {
59-
return fmt.Errorf("MUT_AUTH_CAP requires KEY_EX_CAP or PSK_CAP")
57+
return &ErrCapabilityConflict{Msg: "MUT_AUTH_CAP requires KEY_EX_CAP or PSK_CAP"}
6058
}
6159

6260
// HANDSHAKE_IN_THE_CLEAR_CAP requires KEY_EX_CAP.
6361
if c.HasHandshakeInTheClearCap() && !hasKeyEx {
64-
return fmt.Errorf("HANDSHAKE_IN_THE_CLEAR_CAP requires KEY_EX_CAP")
62+
return &ErrCapabilityConflict{Msg: "HANDSHAKE_IN_THE_CLEAR_CAP requires KEY_EX_CAP"}
6563
}
6664

6765
return nil
@@ -85,14 +83,14 @@ func validateRequesterSessionCaps(c RequesterCaps) error {
8583
// ENCRYPT_CAP and MAC_CAP must both be set or both clear.
8684
if hasEncrypt != hasMAC {
8785
if hasEncrypt {
88-
return fmt.Errorf("ENCRYPT_CAP requires MAC_CAP to also be set")
86+
return &ErrCapabilityConflict{Msg: "ENCRYPT_CAP requires MAC_CAP to also be set"}
8987
}
90-
return fmt.Errorf("MAC_CAP requires ENCRYPT_CAP to also be set")
88+
return &ErrCapabilityConflict{Msg: "MAC_CAP requires ENCRYPT_CAP to also be set"}
9189
}
9290

9391
// If ENCRYPT_CAP or MAC_CAP is set, KEY_EX_CAP or PSK_CAP must be set.
9492
if (hasEncrypt || hasMAC) && !c.HasKeyExCap() && !c.HasPSKCap() {
95-
return fmt.Errorf("ENCRYPT_CAP/MAC_CAP require KEY_EX_CAP or PSK_CAP")
93+
return &ErrCapabilityConflict{Msg: "ENCRYPT_CAP/MAC_CAP require KEY_EX_CAP or PSK_CAP"}
9694
}
9795

9896
return nil
@@ -104,24 +102,24 @@ func validateRequesterSessionCaps(c RequesterCaps) error {
104102
func validateRequesterAuthCaps(c RequesterCaps) error {
105103
// CERT_CAP and PUB_KEY_ID_CAP are mutually exclusive.
106104
if c.HasCertCap() && c.HasPubKeyIDCap() {
107-
return fmt.Errorf("CERT_CAP and PUB_KEY_ID_CAP are mutually exclusive")
105+
return &ErrCapabilityConflict{Msg: "CERT_CAP and PUB_KEY_ID_CAP are mutually exclusive"}
108106
}
109107

110108
// CHAL_CAP requires CERT_CAP or PUB_KEY_ID_CAP.
111109
if c.HasChalCap() && !c.HasCertCap() && !c.HasPubKeyIDCap() {
112-
return fmt.Errorf("CHAL_CAP requires CERT_CAP or PUB_KEY_ID_CAP")
110+
return &ErrCapabilityConflict{Msg: "CHAL_CAP requires CERT_CAP or PUB_KEY_ID_CAP"}
113111
}
114112

115113
hasKeyEx := c.HasKeyExCap()
116114

117115
// MUT_AUTH_CAP requires KEY_EX_CAP or PSK_CAP.
118116
if c.HasMutAuthCap() && !hasKeyEx && !c.HasPSKCap() {
119-
return fmt.Errorf("MUT_AUTH_CAP requires KEY_EX_CAP or PSK_CAP")
117+
return &ErrCapabilityConflict{Msg: "MUT_AUTH_CAP requires KEY_EX_CAP or PSK_CAP"}
120118
}
121119

122120
// HANDSHAKE_IN_THE_CLEAR_CAP requires KEY_EX_CAP.
123121
if c.HasHandshakeInTheClearCap() && !hasKeyEx {
124-
return fmt.Errorf("HANDSHAKE_IN_THE_CLEAR_CAP requires KEY_EX_CAP")
122+
return &ErrCapabilityConflict{Msg: "HANDSHAKE_IN_THE_CLEAR_CAP requires KEY_EX_CAP"}
125123
}
126124

127125
return nil

0 commit comments

Comments
 (0)