@@ -392,8 +392,8 @@ DeviceCommissioner::DeviceCommissioner() :
392
392
mOnDeviceConnectionRetryCallback (OnDeviceConnectionRetryFn, this ),
393
393
#endif // CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
394
394
mDeviceAttestationInformationVerificationCallback (OnDeviceAttestationInformationVerification, this ),
395
- mDACChainRevocationStatusVerificationCallback (OnDACChainRevocationStatusVerification , this ),
396
- mDeviceNOCChainCallback (OnDeviceNOCChainGeneration, this ), mSetUpCodePairer (this )
395
+ mDACChainRevocationStatusCallback (OnDACChainRevocationStatus, this ), mDeviceNOCChainCallback (OnDeviceNOCChainGeneration , this ),
396
+ mSetUpCodePairer (this )
397
397
{}
398
398
399
399
CHIP_ERROR DeviceCommissioner::Init (CommissionerInitParams params)
@@ -1107,6 +1107,17 @@ void DeviceCommissioner::OnDeviceAttestationInformationVerification(
1107
1107
MATTER_TRACE_SCOPE (" OnDeviceAttestationInformationVerification" , " DeviceCommissioner" );
1108
1108
DeviceCommissioner * commissioner = reinterpret_cast <DeviceCommissioner *>(context);
1109
1109
1110
+ if (commissioner->attestationInformationVerificationResult == AttestationVerificationResult::kNotImplemented )
1111
+ {
1112
+ commissioner->attestationInformationVerificationResult = result;
1113
+ }
1114
+
1115
+ VerifyOrReturn (commissioner->dacChainRevocationStatusResult != AttestationVerificationResult::kNotImplemented );
1116
+
1117
+ result = commissioner->attestationInformationVerificationResult != AttestationVerificationResult::kSuccess
1118
+ ? commissioner->attestationInformationVerificationResult
1119
+ : commissioner->dacChainRevocationStatusResult ;
1120
+
1110
1121
if (!commissioner->mDeviceBeingCommissioned )
1111
1122
{
1112
1123
ChipLogError (Controller, " Device attestation verification result received when we're not commissioning a device" );
@@ -1156,64 +1167,25 @@ void DeviceCommissioner::OnDeviceAttestationInformationVerification(
1156
1167
}
1157
1168
}
1158
1169
1159
- void DeviceCommissioner::OnDACChainRevocationStatusVerification (
1160
- void * context, const Credentials::DeviceAttestationVerifier::AttestationInfo & info, AttestationVerificationResult result)
1170
+ void DeviceCommissioner::OnDACChainRevocationStatus (void * context,
1171
+ const Credentials::DeviceAttestationVerifier::AttestationInfo & info,
1172
+ AttestationVerificationResult result)
1161
1173
{
1162
- MATTER_TRACE_SCOPE (" OnDACChainRevocationStatusVerification " , " DeviceCommissioner" );
1174
+ MATTER_TRACE_SCOPE (" OnDeviceAttestationInformationVerification " , " DeviceCommissioner" );
1163
1175
DeviceCommissioner * commissioner = reinterpret_cast <DeviceCommissioner *>(context);
1164
1176
1165
- if (! commissioner->mDeviceBeingCommissioned )
1177
+ if (commissioner->dacChainRevocationStatusResult == AttestationVerificationResult:: kNotImplemented )
1166
1178
{
1167
- ChipLogError (Controller, " Device attestation verification result received when we're not commissioning a device" );
1168
- return ;
1179
+ commissioner->dacChainRevocationStatusResult = result;
1169
1180
}
1170
1181
1171
- auto & params = commissioner->mDefaultCommissioner ->GetCommissioningParameters ();
1172
- Credentials::DeviceAttestationDelegate * deviceAttestationDelegate = params.GetDeviceAttestationDelegate ();
1182
+ VerifyOrReturn (commissioner->attestationInformationVerificationResult != AttestationVerificationResult::kNotImplemented );
1173
1183
1174
- if (result != AttestationVerificationResult::kSuccess )
1175
- {
1176
- CommissioningDelegate::CommissioningReport report;
1177
- report.Set <AttestationErrorInfo>(result);
1178
- if (result == AttestationVerificationResult::kNotImplemented )
1179
- {
1180
- ChipLogError (Controller,
1181
- " Failed in verifying 'DAC Chain Revocation Status' command received from the device due to default "
1182
- " DeviceAttestationVerifier Class not being overridden by a real implementation." );
1183
- commissioner->CommissioningStageComplete (CHIP_ERROR_NOT_IMPLEMENTED, report);
1184
- return ;
1185
- }
1186
-
1187
- ChipLogError (Controller,
1188
- " Failed in verifying 'DAC Chain Revocation Status' command received from the device: err %hu. Look at "
1189
- " AttestationVerificationResult enum to understand the errors" ,
1190
- static_cast <uint16_t >(result));
1191
- // Go look at AttestationVerificationResult enum in src/credentials/attestation_verifier/DeviceAttestationVerifier.h to
1192
- // understand the errors.
1193
-
1194
- // If a device attestation status delegate is installed, delegate handling of failure to the client and let them decide on
1195
- // whether to proceed further or not.
1196
- if (deviceAttestationDelegate)
1197
- {
1198
- commissioner->ExtendArmFailSafeForDeviceAttestation (info, result);
1199
- }
1200
- else
1201
- {
1202
- commissioner->CommissioningStageComplete (CHIP_ERROR_INTERNAL, report);
1203
- }
1204
- }
1205
- else
1206
- {
1207
- if (deviceAttestationDelegate && deviceAttestationDelegate->ShouldWaitAfterDeviceAttestation ())
1208
- {
1209
- commissioner->ExtendArmFailSafeForDeviceAttestation (info, result);
1210
- }
1211
- else
1212
- {
1213
- ChipLogProgress (Controller, " Successfully validated 'DAC Chain Revocation Status' command received from the device." );
1214
- commissioner->CommissioningStageComplete (CHIP_NO_ERROR);
1215
- }
1216
- }
1184
+ OnDeviceAttestationInformationVerification (context, info,
1185
+ commissioner->dacChainRevocationStatusResult !=
1186
+ AttestationVerificationResult::kSuccess
1187
+ ? commissioner->dacChainRevocationStatusResult
1188
+ : result);
1217
1189
}
1218
1190
1219
1191
void DeviceCommissioner::OnArmFailSafeExtendedForDeviceAttestation (
@@ -1363,13 +1335,13 @@ CHIP_ERROR DeviceCommissioner::ValidateAttestationInfo(const Credentials::Device
1363
1335
}
1364
1336
1365
1337
CHIP_ERROR
1366
- DeviceCommissioner::ValidateDACChainRevocationStatus (const Credentials::DeviceAttestationVerifier::AttestationInfo & info)
1338
+ DeviceCommissioner::CheckForRevokedDACChain (const Credentials::DeviceAttestationVerifier::AttestationInfo & info)
1367
1339
{
1368
- MATTER_TRACE_SCOPE (" ValidateDACChainRevocationStatus " , " DeviceCommissioner" );
1340
+ MATTER_TRACE_SCOPE (" CheckForRevokedDACChain " , " DeviceCommissioner" );
1369
1341
VerifyOrReturnError (mState == State::Initialized, CHIP_ERROR_INCORRECT_STATE);
1370
1342
VerifyOrReturnError (mDeviceAttestationVerifier != nullptr , CHIP_ERROR_INCORRECT_STATE);
1371
1343
1372
- mDeviceAttestationVerifier ->ValidateDACChainRevocationStatus (info, &mDACChainRevocationStatusVerificationCallback );
1344
+ mDeviceAttestationVerifier ->CheckForRevokedDACChain (info, &mDACChainRevocationStatusCallback );
1373
1345
1374
1346
return CHIP_NO_ERROR;
1375
1347
}
@@ -2971,14 +2943,11 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
2971
2943
}
2972
2944
case CommissioningStage::kAttestationVerification : {
2973
2945
ChipLogProgress (Controller, " Verifying attestation" );
2974
- if (!params.GetAttestationElements ().HasValue () || !params.GetAttestationSignature ().HasValue () ||
2975
- !params.GetAttestationNonce ().HasValue () || !params.GetDAC ().HasValue () || !params.GetPAI ().HasValue () ||
2976
- !params.GetRemoteVendorId ().HasValue () || !params.GetRemoteProductId ().HasValue ())
2977
- {
2978
- ChipLogError (Controller, " Missing attestation information" );
2979
- CommissioningStageComplete (CHIP_ERROR_INVALID_ARGUMENT);
2980
- return ;
2981
- }
2946
+ VerifyOrReturn (IsAttestationInformationMissing (params) == false );
2947
+
2948
+ // Reset results before verifying
2949
+ attestationInformationVerificationResult = AttestationVerificationResult::kNotImplemented ;
2950
+ dacChainRevocationStatusResult = AttestationVerificationResult::kNotImplemented ;
2982
2951
2983
2952
DeviceAttestationVerifier::AttestationInfo info (
2984
2953
params.GetAttestationElements ().Value (),
@@ -2996,25 +2965,18 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
2996
2965
break ;
2997
2966
case CommissioningStage::kAttestationRevocationCheck : {
2998
2967
ChipLogProgress (Controller, " Verifying device's DAC chain revocation status" );
2999
- if (!params.GetAttestationElements ().HasValue () || !params.GetAttestationSignature ().HasValue () ||
3000
- !params.GetAttestationNonce ().HasValue () || !params.GetDAC ().HasValue () || !params.GetPAI ().HasValue () ||
3001
- !params.GetRemoteVendorId ().HasValue () || !params.GetRemoteProductId ().HasValue ())
3002
- {
3003
- ChipLogError (Controller, " Missing attestation certificates" );
3004
- CommissioningStageComplete (CHIP_ERROR_INVALID_ARGUMENT);
3005
- return ;
3006
- }
2968
+ VerifyOrReturn (IsAttestationInformationMissing (params) == false );
3007
2969
3008
2970
DeviceAttestationVerifier::AttestationInfo info (
3009
2971
params.GetAttestationElements ().Value (),
3010
2972
proxy->GetSecureSession ().Value ()->AsSecureSession ()->GetCryptoContext ().GetAttestationChallenge (),
3011
2973
params.GetAttestationSignature ().Value (), params.GetPAI ().Value (), params.GetDAC ().Value (),
3012
2974
params.GetAttestationNonce ().Value (), params.GetRemoteVendorId ().Value (), params.GetRemoteProductId ().Value ());
3013
2975
3014
- if (ValidateDACChainRevocationStatus (info) != CHIP_NO_ERROR)
2976
+ if (CheckForRevokedDACChain (info) != CHIP_NO_ERROR)
3015
2977
{
3016
2978
ChipLogError (Controller, " Error validating device's DAC chain revocation status" );
3017
- CommissioningStageComplete (CHIP_ERROR_INVALID_ARGUMENT );
2979
+ CommissioningStageComplete (CHIP_ERROR_FAILED_DEVICE_ATTESTATION );
3018
2980
return ;
3019
2981
}
3020
2982
}
@@ -3359,6 +3321,20 @@ void DeviceCommissioner::ExtendFailsafeBeforeNetworkEnable(DeviceProxy * device,
3359
3321
}
3360
3322
}
3361
3323
3324
+ bool DeviceCommissioner::IsAttestationInformationMissing (CommissioningParameters & params)
3325
+ {
3326
+ if (!params.GetAttestationElements ().HasValue () || !params.GetAttestationSignature ().HasValue () ||
3327
+ !params.GetAttestationNonce ().HasValue () || !params.GetDAC ().HasValue () || !params.GetPAI ().HasValue () ||
3328
+ !params.GetRemoteVendorId ().HasValue () || !params.GetRemoteProductId ().HasValue ())
3329
+ {
3330
+ ChipLogError (Controller, " Missing attestation information" );
3331
+ CommissioningStageComplete (CHIP_ERROR_INVALID_ARGUMENT);
3332
+ return true ;
3333
+ }
3334
+
3335
+ return false ;
3336
+ }
3337
+
3362
3338
CHIP_ERROR DeviceController::GetCompressedFabricIdBytes (MutableByteSpan & outBytes) const
3363
3339
{
3364
3340
const auto * fabricInfo = GetFabricInfo ();
0 commit comments