Skip to content

Commit af773a0

Browse files
Sync csa branch with main (#652)
2 parents 51bde28 + 04dd945 commit af773a0

File tree

53 files changed

+1880
-487
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1880
-487
lines changed

examples/all-clusters-app/all-clusters-common/include/tls-certificate-management-instance.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ class TlsCertificateManagementCommandDelegate : public TlsCertificateManagementD
3636
TlsCertificateManagementCommandDelegate(Tls::CertificateTable & certificateTable) : mCertificateTable(certificateTable) {}
3737
~TlsCertificateManagementCommandDelegate() = default;
3838

39-
Protocols::InteractionModel::ClusterStatusCode ProvisionRootCert(EndpointId matterEndpoint, FabricIndex fabric,
40-
const ProvisionRootCertificateType & provisionReq,
41-
Tls::TLSCAID & outCaid) override;
39+
Protocols::InteractionModel::Status ProvisionRootCert(EndpointId matterEndpoint, FabricIndex fabric,
40+
const ProvisionRootCertificateType & provisionReq,
41+
Tls::TLSCAID & outCaid) override;
4242

4343
CHIP_ERROR LoadedRootCerts(EndpointId matterEndpoint, FabricIndex fabric,
4444
LoadedRootCertificateCallback loadedCallback) const override;
@@ -56,9 +56,8 @@ class TlsCertificateManagementCommandDelegate : public TlsCertificateManagementD
5656
Protocols::InteractionModel::Status GenerateClientCsr(EndpointId matterEndpoint, FabricIndex fabric,
5757
const ClientCsrType & request,
5858
GeneratedCsrCallback loadedCallback) const override;
59-
Protocols::InteractionModel::ClusterStatusCode
60-
ProvisionClientCert(EndpointId matterEndpoint, FabricIndex fabric,
61-
const ProvisionClientCertificateType & provisionReq) override;
59+
Protocols::InteractionModel::Status ProvisionClientCert(EndpointId matterEndpoint, FabricIndex fabric,
60+
const ProvisionClientCertificateType & provisionReq) override;
6261

6362
CHIP_ERROR LoadedClientCerts(EndpointId matterEndpoint, FabricIndex fabric,
6463
LoadedClientCertificateCallback loadedCallback) const override;
@@ -73,7 +72,7 @@ class TlsCertificateManagementCommandDelegate : public TlsCertificateManagementD
7372
LoadedClientCertificateCallback loadedCallback) const override;
7473
Protocols::InteractionModel::Status RemoveClientCert(EndpointId matterEndpoint, FabricIndex fabric, Tls::TLSCCDID id) override;
7574

76-
static inline TlsCertificateManagementCommandDelegate & getInstance() { return instance; }
75+
static inline TlsCertificateManagementCommandDelegate & GetInstance() { return instance; }
7776
};
7877

7978
} // namespace Clusters

examples/all-clusters-app/all-clusters-common/include/tls-client-management-instance.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ class TlsClientManagementCommandDelegate : public TlsClientManagementDelegate
6161
Protocols::InteractionModel::ClusterStatusCode RemoveProvisionedEndpointByID(EndpointId matterEndpoint, FabricIndex fabric,
6262
uint16_t endpointID) override;
6363

64+
CHIP_ERROR RootCertCanBeRemoved(EndpointId matterEndpoint, FabricIndex fabric, Tls::TLSCAID id) override;
65+
CHIP_ERROR ClientCertCanBeRemoved(EndpointId matterEndpoint, FabricIndex fabric, Tls::TLSCCDID id) override;
66+
6467
static inline TlsClientManagementCommandDelegate & GetInstance() { return instance; }
6568

6669
uint16_t GetEndpointId(Provisioned * provisioned);

examples/all-clusters-app/all-clusters-common/src/tls-certificate-management-instance.cpp

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <clusters/TlsCertificateManagement/Commands.h>
2323
#include <crypto/CHIPCryptoPAL.h>
2424
#include <tls-certificate-management-instance.h>
25+
#include <tls-client-management-instance.h>
2526

2627
using namespace chip;
2728
using namespace chip::app;
@@ -135,31 +136,31 @@ struct InlineEncodableClientCert : RefEncodableClientCert
135136
InlineEncodableClientCert() : RefEncodableClientCert(inlineCertificate) {}
136137
};
137138

138-
static constexpr uint8_t kMaxRootCerts = 254;
139-
static constexpr uint8_t kMaxClientCerts = 254;
139+
static constexpr uint8_t kMaxRootCerts = kMaxRootCertificatesPerFabric;
140+
static constexpr uint8_t kMaxClientCerts = kMaxClientCertificatesPerFabric;
140141

141142
CHIP_ERROR FingerprintMatch(const ByteSpan & fingerprint, const ByteSpan & cert, bool & outMatch)
142143
{
143-
std::array<uint8_t, chip::Crypto::kSHA1_Hash_Length> fingerprintPayload = { 0 };
144+
std::array<uint8_t, chip::Crypto::kSHA256_Hash_Length> fingerprintPayload = { 0 };
144145
MutableByteSpan calculatedFingerprint(fingerprintPayload);
145-
ReturnErrorOnFailure(Hash_SHA1(cert.data(), cert.size(), fingerprintPayload.data()));
146+
ReturnErrorOnFailure(Hash_SHA256(cert.data(), cert.size(), fingerprintPayload.data()));
146147
outMatch = fingerprint.data_equal(calculatedFingerprint);
147148
return CHIP_NO_ERROR;
148149
}
149150

150-
ClusterStatusCode TlsCertificateManagementCommandDelegate::ProvisionRootCert(EndpointId matterEndpoint, FabricIndex fabric,
151-
const ProvisionRootCertificateType & provisionReq,
152-
Tls::TLSCAID & outCaid)
151+
Status TlsCertificateManagementCommandDelegate::ProvisionRootCert(EndpointId matterEndpoint, FabricIndex fabric,
152+
const ProvisionRootCertificateType & provisionReq,
153+
Tls::TLSCAID & outCaid)
153154
{
154155
auto localId = provisionReq.caid.IsNull() ? Optional<Tls::TLSCAID>() : Optional<Tls::TLSCAID>(provisionReq.caid.Value());
155156
UniquePtr<InlineBufferedRootCert> certBuffer(New<InlineBufferedRootCert>());
156-
VerifyOrReturnError(certBuffer, ClusterStatusCode(CHIP_ERROR_NO_MEMORY));
157+
VerifyOrReturnError(certBuffer, Status::ResourceExhausted);
157158

158159
auto result = mCertificateTable.UpsertRootCertificateEntry(fabric, localId, certBuffer->buffer, provisionReq.certificate);
159160

160-
VerifyOrReturnValue(result == CHIP_NO_ERROR, ClusterStatusCode(Status::Failure));
161+
VerifyOrReturnValue(result == CHIP_NO_ERROR, Status::Failure);
161162
outCaid = localId.Value();
162-
return ClusterStatusCode(Status::Success);
163+
return Status::Success;
163164
}
164165

165166
CHIP_ERROR TlsCertificateManagementCommandDelegate::LoadedRootCerts(EndpointId matterEndpoint, FabricIndex fabric,
@@ -252,9 +253,9 @@ CHIP_ERROR TlsCertificateManagementCommandDelegate::LookupRootCert(EndpointId ma
252253
const ByteSpan & certificate,
253254
LoadedRootCertificateCallback loadedCallback) const
254255
{
255-
std::array<uint8_t, chip::Crypto::kSHA1_Hash_Length> fingerprintPayload = { 0 };
256+
std::array<uint8_t, Crypto::kSHA256_Hash_Length> fingerprintPayload = { 0 };
256257
MutableByteSpan calculatedFingerprint(fingerprintPayload);
257-
ReturnErrorOnFailure(Hash_SHA1(certificate.data(), certificate.size(), fingerprintPayload.data()));
258+
ReturnErrorOnFailure(Hash_SHA256(certificate.data(), certificate.size(), fingerprintPayload.data()));
258259
return LookupRootCertByFingerprint(matterEndpoint, fabric, calculatedFingerprint, loadedCallback);
259260
}
260261

@@ -302,19 +303,25 @@ Status TlsCertificateManagementCommandDelegate::GenerateClientCsr(EndpointId mat
302303
return loadedCallback(csrResponse);
303304
}
304305

305-
ClusterStatusCode TlsCertificateManagementCommandDelegate::ProvisionClientCert(EndpointId matterEndpoint, FabricIndex fabric,
306-
const ProvisionClientCertificateType & provisionReq)
306+
Status TlsCertificateManagementCommandDelegate::ProvisionClientCert(EndpointId matterEndpoint, FabricIndex fabric,
307+
const ProvisionClientCertificateType & provisionReq)
307308
{
308309
UniquePtr<InlineBufferedClientCert> certBuffer(New<InlineBufferedClientCert>());
309-
VerifyOrReturnError(certBuffer, ClusterStatusCode(CHIP_ERROR_NO_MEMORY));
310+
VerifyOrReturnError(certBuffer, Status::ResourceExhausted);
311+
310312
TLSClientCertificateDetailStruct::DecodableType details;
311313
details.ccdid = provisionReq.ccdid;
312314
details.clientCertificate.SetValue(provisionReq.clientCertificate);
313315
details.intermediateCertificates.SetValue(provisionReq.intermediateCertificates);
314316
details.SetFabricIndex(fabric);
317+
315318
auto result = mCertificateTable.UpdateClientCertificateEntry(fabric, provisionReq.ccdid, certBuffer->buffer, details);
316-
ReturnValueOnFailure(result, ClusterStatusCode(Status::Failure));
317-
return ClusterStatusCode(Status::Success);
319+
if (result == CHIP_ERROR_INVALID_ARGUMENT)
320+
{
321+
return Status::DynamicConstraintError;
322+
}
323+
ReturnValueOnFailure(result, Status::Failure);
324+
return Status::Success;
318325
}
319326

320327
CHIP_ERROR TlsCertificateManagementCommandDelegate::LoadedClientCerts(EndpointId matterEndpoint, FabricIndex fabric,
@@ -413,13 +420,13 @@ CHIP_ERROR TlsCertificateManagementCommandDelegate::LookupClientCert(EndpointId
413420
const ByteSpan & certificate,
414421
LoadedClientCertificateCallback loadedCallback) const
415422
{
416-
std::array<uint8_t, chip::Crypto::kSHA1_Hash_Length> fingerprintPayload = { 0 };
423+
std::array<uint8_t, Crypto::kSHA256_Hash_Length> fingerprintPayload = { 0 };
417424
MutableByteSpan calculatedFingerprint(fingerprintPayload);
418-
ReturnErrorOnFailure(Hash_SHA1(certificate.data(), certificate.size(), fingerprintPayload.data()));
425+
ReturnErrorOnFailure(Hash_SHA256(certificate.data(), certificate.size(), fingerprintPayload.data()));
419426
return LookupClientCertByFingerprint(matterEndpoint, fabric, calculatedFingerprint, loadedCallback);
420427
}
421428

422-
Status TlsCertificateManagementCommandDelegate::RemoveClientCert(EndpointId matterEndpoint, FabricIndex fabric, Tls::TLSCAID id)
429+
Status TlsCertificateManagementCommandDelegate::RemoveClientCert(EndpointId matterEndpoint, FabricIndex fabric, Tls::TLSCCDID id)
423430
{
424431
VerifyOrReturnValue(matterEndpoint == EndpointId(1), Status::ConstraintError);
425432

@@ -436,9 +443,9 @@ Status TlsCertificateManagementCommandDelegate::RemoveClientCert(EndpointId matt
436443

437444
static CertificateTableImpl gCertificateTableInstance;
438445
TlsCertificateManagementCommandDelegate TlsCertificateManagementCommandDelegate::instance(gCertificateTableInstance);
439-
static TlsCertificateManagementServer gTlsCertificateManagementClusterServerInstance =
440-
TlsCertificateManagementServer(EndpointId(1), TlsCertificateManagementCommandDelegate::getInstance(), gCertificateTableInstance,
441-
kMaxRootCerts, kMaxClientCerts);
446+
static TlsCertificateManagementServer gTlsCertificateManagementClusterServerInstance = TlsCertificateManagementServer(
447+
EndpointId(1), TlsCertificateManagementCommandDelegate::GetInstance(), TlsClientManagementCommandDelegate::GetInstance(),
448+
gCertificateTableInstance, kMaxRootCerts, kMaxClientCerts);
442449

443450
void emberAfTlsCertificateManagementClusterInitCallback(EndpointId matterEndpoint)
444451
{

examples/all-clusters-app/all-clusters-common/src/tls-client-management-instance.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,33 @@ ClusterStatusCode TlsClientManagementCommandDelegate::RemoveProvisionedEndpointB
201201
return ClusterStatusCode(Status::Success);
202202
}
203203

204+
CHIP_ERROR TlsClientManagementCommandDelegate::RootCertCanBeRemoved(EndpointId matterEndpoint, FabricIndex fabric, Tls::TLSCAID id)
205+
{
206+
auto i = mProvisioned.begin();
207+
for (; i != mProvisioned.end(); i++)
208+
{
209+
if (i->payload.caid == id)
210+
{
211+
return CHIP_ERROR_BAD_REQUEST;
212+
}
213+
}
214+
return CHIP_NO_ERROR;
215+
}
216+
217+
CHIP_ERROR TlsClientManagementCommandDelegate::ClientCertCanBeRemoved(EndpointId matterEndpoint, FabricIndex fabric,
218+
Tls::TLSCCDID id)
219+
{
220+
auto i = mProvisioned.begin();
221+
for (; i != mProvisioned.end(); i++)
222+
{
223+
if (i->payload.ccdid == id)
224+
{
225+
return CHIP_ERROR_BAD_REQUEST;
226+
}
227+
}
228+
return CHIP_NO_ERROR;
229+
}
230+
204231
static CertificateTableImpl gCertificateTableInstance;
205232
TlsClientManagementCommandDelegate TlsClientManagementCommandDelegate::instance(gCertificateTableInstance);
206233
static TlsClientManagementServer gTlsClientManagementClusterServerInstance = TlsClientManagementServer(

examples/camera-app/camera-common/src/camera-app.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ CameraApp::CameraApp(chip::EndpointId aClustersEndpoint, CameraDeviceInterface *
5252
&Clusters::TlsClientManagementCommandDelegate::GetInstance());
5353

5454
Clusters::PushAvStreamTransport::SetTlsCertificateManagementDelegate(
55-
mEndpoint, &Clusters::TlsCertificateManagementCommandDelegate::getInstance());
55+
mEndpoint, &Clusters::TlsCertificateManagementCommandDelegate::GetInstance());
5656
// Fetch all initialization parameters for CameraAVStreamMgmt Server
5757
BitFlags<CameraAvStreamManagement::Feature> avsmFeatures;
5858
BitFlags<CameraAvStreamManagement::OptionalAttribute> avsmOptionalAttrs;

examples/camera-controller/BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ static_library("camera-controller-utils") {
111111

112112
public_deps = [
113113
"${chip_root}/examples/common/tracing:commandline",
114-
"${chip_root}/src/app:required-privileges",
115114
"${chip_root}/src/app/server",
116115
"${chip_root}/src/app/tests/suites/commands/interaction_model",
117116
"${chip_root}/src/controller/data_model",

examples/chef/chef.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,7 @@ def main() -> int:
892892
f'"CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID={options.pid}", '
893893
f'"CONFIG_ENABLE_PW_RPC={int(options.do_rpc)}", '
894894
f'"CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME=\\"{str(options.pname)}\\""]'),
895+
'chip_app_data_model_target = "//:chef-data-model"',
895896
])
896897

897898
uname_resp = shell.run_cmd("uname -m", return_cmd_output=True)

examples/contact-sensor-app/bouffalolab/bl702l/args.gni

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ chip_error_logging = true
2727
chip_enable_icd_server = true
2828
chip_enable_icd_lit = true
2929
chip_enable_icd_dsls = true
30+
chip_app_data_model_target = "//:bouffalolab_contact_sensor"

examples/lighting-app/bouffalolab/bl602/args.gni

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,4 @@ pw_build_LINK_DEPS = [
3232
"$dir_pw_assert:impl",
3333
"$dir_pw_log:impl",
3434
]
35+
chip_app_data_model_target = "//:bouffalolab-lighting"

examples/lighting-app/bouffalolab/bl616/args.gni

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ chip_detail_logging = false
2323

2424
# use -Os instead of -Og
2525
is_debug = false
26+
chip_app_data_model_target = "//:bouffalolab-lighting"

0 commit comments

Comments
 (0)