20
20
21
21
#include < commands/interactive/InteractiveCommands.h>
22
22
#include < crypto/RandUtils.h>
23
+ #include < device_manager/PairingManager.h>
23
24
#include < lib/support/StringBuilder.h>
24
25
25
26
#include < cstdio>
@@ -30,13 +31,12 @@ using namespace chip::app::Clusters;
30
31
31
32
namespace {
32
33
33
- constexpr uint16_t kWindowTimeout = 300 ;
34
- constexpr uint16_t kIteration = 1000 ;
35
- constexpr uint16_t kSubscribeMinInterval = 0 ;
36
- constexpr uint16_t kSubscribeMaxInterval = 60 ;
37
- constexpr uint16_t kAggragatorEndpointId = 1 ;
38
- constexpr uint16_t kMaxDiscriminatorLength = 4095 ;
39
- constexpr uint8_t kEnhancedCommissioningMethod = 1 ;
34
+ constexpr uint16_t kWindowTimeout = 300 ;
35
+ constexpr uint16_t kIteration = 1000 ;
36
+ constexpr uint16_t kSubscribeMinInterval = 0 ;
37
+ constexpr uint16_t kSubscribeMaxInterval = 60 ;
38
+ constexpr uint16_t kAggragatorEndpointId = 1 ;
39
+ constexpr uint16_t kMaxDiscriminatorLength = 4095 ;
40
40
41
41
} // namespace
42
42
@@ -116,18 +116,17 @@ void DeviceManager::RemoveSyncedDevice(NodeId nodeId)
116
116
}
117
117
118
118
void DeviceManager::OpenDeviceCommissioningWindow (NodeId nodeId, uint32_t commissioningTimeout, uint32_t iterations,
119
- uint32_t discriminator, const char * saltHex , const char * verifierHex )
119
+ uint16_t discriminator, const ByteSpan & salt , const ByteSpan & verifier )
120
120
{
121
- ChipLogProgress (NotSpecified, " Open the commissioning window of device with NodeId: " ChipLogFormatX64, ChipLogValueX64 (nodeId));
121
+ ChipLogProgress (NotSpecified, " Opening commissioning window for Node ID: " ChipLogFormatX64, ChipLogValueX64 (nodeId));
122
122
123
123
// Open the commissioning window of a device within its own fabric.
124
- StringBuilder<kMaxCommandSize > commandBuilder;
125
-
126
- commandBuilder.Add (" pairing open-commissioning-window " );
127
- commandBuilder.AddFormat (" %lu %d %d %d %d %d --salt hex:%s --verifier hex:%s" , nodeId, kRootEndpointId ,
128
- kEnhancedCommissioningMethod , commissioningTimeout, iterations, discriminator, saltHex, verifierHex);
129
-
130
- PushCommand (commandBuilder.c_str ());
124
+ CHIP_ERROR err = PairingManager::Instance ().OpenCommissioningWindow (nodeId, kRootEndpointId , commissioningTimeout, iterations,
125
+ discriminator, salt, verifier);
126
+ if (err != CHIP_NO_ERROR)
127
+ {
128
+ ChipLogError (NotSpecified, " Failed to open commissioning window: %s" , ErrorStr (err));
129
+ }
131
130
}
132
131
133
132
void DeviceManager::OpenRemoteDeviceCommissioningWindow (EndpointId remoteEndpointId)
@@ -141,11 +140,15 @@ void DeviceManager::OpenRemoteDeviceCommissioningWindow(EndpointId remoteEndpoin
141
140
uint16_t discriminator =
142
141
Crypto::GetRandU16 () % (kMaxDiscriminatorLength + 1 ); // Include the upper limit kMaxDiscriminatorLength
143
142
144
- commandBuilder.Add (" pairing open-commissioning-window " );
145
- commandBuilder.AddFormat (" %lu %d %d %d %d %d" , mRemoteBridgeNodeId , remoteEndpointId, kEnhancedCommissioningMethod ,
146
- kWindowTimeout , kIteration , discriminator);
143
+ ByteSpan emptySalt;
144
+ ByteSpan emptyVerifier;
147
145
148
- PushCommand (commandBuilder.c_str ());
146
+ CHIP_ERROR err = PairingManager::Instance ().OpenCommissioningWindow (mRemoteBridgeNodeId , remoteEndpointId, kWindowTimeout ,
147
+ kIteration , discriminator, emptySalt, emptyVerifier);
148
+ if (err != CHIP_NO_ERROR)
149
+ {
150
+ ChipLogError (NotSpecified, " Failed to open commissioning window: %s" , ErrorStr (err));
151
+ }
149
152
}
150
153
151
154
void DeviceManager::PairRemoteFabricBridge (chip::NodeId nodeId, uint32_t setupPINCode, const char * deviceRemoteIp,
@@ -421,6 +424,7 @@ void DeviceManager::HandleReverseOpenCommissioningWindow(TLV::TLVReader & data)
421
424
{
422
425
CommissionerControl::Commands::ReverseOpenCommissioningWindow::DecodableType value;
423
426
CHIP_ERROR error = app::DataModel::Decode (data, value);
427
+
424
428
if (error != CHIP_NO_ERROR)
425
429
{
426
430
ChipLogError (NotSpecified, " Failed to decode command response value. Error: %" CHIP_ERROR_FORMAT, error.Format ());
@@ -432,18 +436,12 @@ void DeviceManager::HandleReverseOpenCommissioningWindow(TLV::TLVReader & data)
432
436
ChipLogProgress (NotSpecified, " commissioningTimeout: %u" , value.commissioningTimeout );
433
437
ChipLogProgress (NotSpecified, " discriminator: %u" , value.discriminator );
434
438
ChipLogProgress (NotSpecified, " iterations: %u" , value.iterations );
439
+ ChipLogProgress (NotSpecified, " PAKEPasscodeVerifier size: %lu" , value.PAKEPasscodeVerifier .size ());
440
+ ChipLogProgress (NotSpecified, " salt size: %lu" , value.salt .size ());
435
441
436
- char verifierHex[Crypto::kSpake2p_VerifierSerialized_Length * 2 + 1 ];
437
- Encoding::BytesToHex (value.PAKEPasscodeVerifier .data (), value.PAKEPasscodeVerifier .size (), verifierHex, sizeof (verifierHex),
438
- Encoding::HexFlags::kNullTerminate );
439
- ChipLogProgress (NotSpecified, " PAKEPasscodeVerifier: %s" , verifierHex);
440
-
441
- char saltHex[Crypto::kSpake2p_Max_PBKDF_Salt_Length * 2 + 1 ];
442
- Encoding::BytesToHex (value.salt .data (), value.salt .size (), saltHex, sizeof (saltHex), Encoding::HexFlags::kNullTerminate );
443
- ChipLogProgress (NotSpecified, " salt: %s" , saltHex);
444
-
445
- OpenDeviceCommissioningWindow (mLocalBridgeNodeId , value.commissioningTimeout , value.iterations , value.discriminator , saltHex,
446
- verifierHex);
442
+ OpenDeviceCommissioningWindow (mLocalBridgeNodeId , value.commissioningTimeout , value.iterations , value.discriminator ,
443
+ ByteSpan (value.salt .data (), value.salt .size ()),
444
+ ByteSpan (value.PAKEPasscodeVerifier .data (), value.PAKEPasscodeVerifier .size ()));
447
445
}
448
446
449
447
void DeviceManager::HandleAttributeData (const app::ConcreteDataAttributePath & path, TLV::TLVReader & data)
0 commit comments