11package 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.
75func 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 {
4442func 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 {
104102func 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