Skip to content

Commit f7b8166

Browse files
committed
Integrating Comments and Adding comments
1 parent 6723bd3 commit f7b8166

File tree

3 files changed

+209
-79
lines changed

3 files changed

+209
-79
lines changed

src/protocols/secure_channel/CASESession.cpp

+46-41
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ constexpr chip::TLV::Tag AsTlvContextTag(Enum e)
110110
return chip::TLV::ContextTag(chip::to_underlying(e));
111111
}
112112

113+
constexpr size_t kCaseOverheadForFutureTbeData = 128;
114+
113115
} // namespace
114116

115117
namespace chip {
@@ -1520,15 +1522,12 @@ CHIP_ERROR CASESession::HandleSigma2(System::PacketBufferHandle && msg)
15201522
GetRemoteSessionParameters());
15211523
}
15221524

1523-
size_t msgR2EncryptedLen = parsedSigma2.msgR2Encrypted.AllocatedSize() - CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES;
1524-
1525-
ReturnErrorOnFailure(AES_CCM_decrypt(parsedSigma2.msgR2Encrypted.Get(), msgR2EncryptedLen, nullptr, 0,
1526-
parsedSigma2.msgR2Encrypted.Get() + msgR2EncryptedLen, CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES,
1527-
sr2k.KeyHandle(), kTBEData2_Nonce, kTBEDataNonceLength,
1528-
parsedSigma2.msgR2Encrypted.Get()));
1525+
ReturnErrorOnFailure(AES_CCM_decrypt(parsedSigma2.msgR2EncryptedPayload.data(), parsedSigma2.msgR2EncryptedPayload.size(),
1526+
nullptr, 0, parsedSigma2.msgR2Mic.data(), parsedSigma2.msgR2Mic.size(), sr2k.KeyHandle(),
1527+
kTBEData2_Nonce, kTBEDataNonceLength, parsedSigma2.msgR2EncryptedPayload.data()));
15291528

15301529
ContiguousBufferTLVReader decryptedDataTlvReader;
1531-
decryptedDataTlvReader.Init(parsedSigma2.msgR2Encrypted.Get(), msgR2EncryptedLen);
1530+
decryptedDataTlvReader.Init(parsedSigma2.msgR2EncryptedPayload.data(), parsedSigma2.msgR2EncryptedPayload.size());
15321531
ParsedSigma2TBEData parsedSigma2TBEData;
15331532
ReturnErrorOnFailure(ParseSigma2TBEData(decryptedDataTlvReader, parsedSigma2TBEData));
15341533

@@ -1600,8 +1599,6 @@ CHIP_ERROR CASESession::ParseSigma2(ContiguousBufferTLVReader & tlvReader, Parse
16001599
// Generate decrypted data
16011600
ReturnErrorOnFailure(tlvReader.Next(AsTlvContextTag(Sigma2Tags::kEncrypted2)));
16021601

1603-
constexpr size_t kCaseOverheadForFutureTbeData = 128;
1604-
16051602
size_t maxMsgR2SignedEncLen = EstimateStructOverhead(kMaxCHIPCertLength, // responderNOC
16061603
kMaxCHIPCertLength, // responderICAC
16071604
kMax_ECDSA_Signature_Length, // signature
@@ -1615,9 +1612,13 @@ CHIP_ERROR CASESession::ParseSigma2(ContiguousBufferTLVReader & tlvReader, Parse
16151612
VerifyOrReturnError(msgR2EncryptedLenWithTag <= maxMsgR2SignedEncLen, CHIP_ERROR_INVALID_TLV_ELEMENT);
16161613
VerifyOrReturnError(msgR2EncryptedLenWithTag > CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES, CHIP_ERROR_INVALID_TLV_ELEMENT);
16171614
VerifyOrReturnError(outParsedSigma2.msgR2Encrypted.Alloc(msgR2EncryptedLenWithTag), CHIP_ERROR_NO_MEMORY);
1618-
16191615
ReturnErrorOnFailure(tlvReader.GetBytes(outParsedSigma2.msgR2Encrypted.Get(), outParsedSigma2.msgR2Encrypted.AllocatedSize()));
16201616

1617+
size_t msgR2EncryptedPayloadLen = msgR2EncryptedLenWithTag - CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES;
1618+
outParsedSigma2.msgR2EncryptedPayload = MutableByteSpan(outParsedSigma2.msgR2Encrypted.Get(), msgR2EncryptedPayloadLen);
1619+
outParsedSigma2.msgR2Mic =
1620+
ByteSpan(outParsedSigma2.msgR2Encrypted.Get() + msgR2EncryptedPayloadLen, CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES);
1621+
16211622
// Retrieve responderSessionParams if present
16221623
CHIP_ERROR err = tlvReader.Next();
16231624
if (err == CHIP_NO_ERROR && tlvReader.GetTag() == AsTlvContextTag(Sigma2Tags::kResponderSessionParams))
@@ -1662,11 +1663,10 @@ CHIP_ERROR CASESession::ParseSigma2TBEData(ContiguousBufferTLVReader & decrypted
16621663
}
16631664

16641665
VerifyOrReturnError(decryptedDataTlvReader.GetTag() == AsTlvContextTag(TBEDataTags::kSignature), CHIP_ERROR_INVALID_TLV_TAG);
1665-
// TODO verify if the below modification in the check is correct (also for Sigma 3)
16661666
// tbsData2Signature's length should equal kMax_ECDSA_Signature_Length as per the Specification
1667-
VerifyOrReturnError(outParsedSigma2TBE.tbsData2Signature.Capacity() == decryptedDataTlvReader.GetLength(),
1668-
CHIP_ERROR_INVALID_TLV_ELEMENT);
1669-
outParsedSigma2TBE.tbsData2Signature.SetLength(decryptedDataTlvReader.GetLength());
1667+
size_t signatureLen = decryptedDataTlvReader.GetLength();
1668+
VerifyOrReturnError(outParsedSigma2TBE.tbsData2Signature.Capacity() == signatureLen, CHIP_ERROR_INVALID_TLV_ELEMENT);
1669+
outParsedSigma2TBE.tbsData2Signature.SetLength(signatureLen);
16701670
ReturnErrorOnFailure(decryptedDataTlvReader.GetBytes(outParsedSigma2TBE.tbsData2Signature.Bytes(),
16711671
outParsedSigma2TBE.tbsData2Signature.Length()));
16721672

@@ -1893,16 +1893,12 @@ CHIP_ERROR CASESession::HandleSigma3a(System::PacketBufferHandle && msg)
18931893
{
18941894
MATTER_TRACE_SCOPE("HandleSigma3", "CASESession");
18951895
CHIP_ERROR err = CHIP_NO_ERROR;
1896-
System::PacketBufferTLVReader tlvReader;
18971896
ContiguousBufferTLVReader decryptedDataTlvReader;
18981897
TLVType containerType = kTLVType_Structure;
18991898

19001899
const uint8_t * buf = msg->Start();
19011900
const size_t bufLen = msg->DataLength();
19021901

1903-
Platform::ScopedMemoryBufferWithSize<uint8_t> msgR3Encrypted;
1904-
size_t msgR3EncryptedLen = 0;
1905-
19061902
AutoReleaseSessionKey sr3k(*mSessionManager->GetSessionKeystore());
19071903

19081904
uint8_t msg_salt[kIPKSize + kSHA256_Hash_Length];
@@ -1925,32 +1921,39 @@ CHIP_ERROR CASESession::HandleSigma3a(System::PacketBufferHandle && msg)
19251921

19261922
VerifyOrExit(mEphemeralKey != nullptr, err = CHIP_ERROR_INTERNAL);
19271923

1928-
tlvReader.Init(std::move(msg));
1929-
1930-
SuccessOrExit(err = ParseSigma3(tlvReader, msgR3Encrypted));
1931-
19321924
// Step 1
1925+
// msgR3Encrypted will be allocated and initialised within ParseSigma3()
1926+
Platform::ScopedMemoryBufferWithSize<uint8_t> msgR3Encrypted;
1927+
// both msgR3EncryptedPayload and msgR3Mic will become backed by msgR3Encrypted in ParseSigma3()
1928+
MutableByteSpan msgR3EncryptedPayload;
1929+
ByteSpan msgR3Mic;
19331930
{
1931+
System::PacketBufferTLVReader tlvReader;
1932+
tlvReader.Init(std::move(msg));
1933+
SuccessOrExit(err = ParseSigma3(tlvReader, msgR3Encrypted, msgR3EncryptedPayload, msgR3Mic));
1934+
1935+
// Generate the S3K key
19341936
MutableByteSpan saltSpan(msg_salt);
19351937
SuccessOrExit(err = ConstructSaltSigma3(ByteSpan(mIPK), saltSpan));
19361938
SuccessOrExit(err = DeriveSigmaKey(saltSpan, ByteSpan(kKDFSR3Info), sr3k));
1937-
}
1938-
1939-
SuccessOrExit(err = mCommissioningHash.AddData(ByteSpan{ buf, bufLen }));
19401939

1940+
// Add Sigma3 to the TranscriptHash which will be used to generate the Session Encryption Keys
1941+
SuccessOrExit(err = mCommissioningHash.AddData(ByteSpan{ buf, bufLen }));
1942+
}
19411943
// Step 2 - Decrypt data blob
1942-
msgR3EncryptedLen = msgR3Encrypted.AllocatedSize() - CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES;
1943-
1944-
SuccessOrExit(err = AES_CCM_decrypt(msgR3Encrypted.Get(), msgR3EncryptedLen, nullptr, 0,
1945-
msgR3Encrypted.Get() + msgR3EncryptedLen, CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES,
1946-
sr3k.KeyHandle(), kTBEData3_Nonce, kTBEDataNonceLength, msgR3Encrypted.Get()));
1944+
SuccessOrExit(err = AES_CCM_decrypt(msgR3EncryptedPayload.data(), msgR3EncryptedPayload.size(), nullptr, 0, msgR3Mic.data(),
1945+
msgR3Mic.size(), sr3k.KeyHandle(), kTBEData3_Nonce, kTBEDataNonceLength,
1946+
msgR3EncryptedPayload.data()));
19471947

1948-
decryptedDataTlvReader.Init(msgR3Encrypted.Get(), msgR3EncryptedLen);
1948+
decryptedDataTlvReader.Init(msgR3EncryptedPayload.data(), msgR3EncryptedPayload.size());
19491949
SuccessOrExit(err = ParseSigma3TBEData(decryptedDataTlvReader, data));
19501950

19511951
// Step 3 - Construct Sigma3 TBS Data
1952-
data.msgR3SignedLen = TLV::EstimateStructOverhead(data.initiatorNOC.size(), data.initiatorICAC.size(),
1953-
kP256_PublicKey_Length, kP256_PublicKey_Length);
1952+
data.msgR3SignedLen = TLV::EstimateStructOverhead(data.initiatorNOC.size(), // initiatorNOC
1953+
data.initiatorICAC.size(), // initiatorICAC
1954+
kP256_PublicKey_Length, // initiatorEphPubKey
1955+
kP256_PublicKey_Length // responderEphPubKey
1956+
);
19541957

19551958
VerifyOrExit(data.msgR3Signed.Alloc(data.msgR3SignedLen), err = CHIP_ERROR_NO_MEMORY);
19561959

@@ -2007,7 +2010,8 @@ CHIP_ERROR CASESession::HandleSigma3a(System::PacketBufferHandle && msg)
20072010
}
20082011

20092012
CHIP_ERROR CASESession::ParseSigma3(ContiguousBufferTLVReader & tlvReader,
2010-
Platform::ScopedMemoryBufferWithSize<uint8_t> & msgR3Encrypted)
2013+
Platform::ScopedMemoryBufferWithSize<uint8_t> & outMsgR3Encrypted,
2014+
MutableByteSpan & outMsgR3EncryptedPayload, ByteSpan & outMsgR3Mic)
20112015
{
20122016
TLVType containerType = kTLVType_Structure;
20132017

@@ -2017,8 +2021,6 @@ CHIP_ERROR CASESession::ParseSigma3(ContiguousBufferTLVReader & tlvReader,
20172021
// Fetch encrypted data
20182022
ReturnErrorOnFailure(tlvReader.Next(AsTlvContextTag(Sigma3Tags::kEncrypted3)));
20192023

2020-
constexpr size_t kCaseOverheadForFutureTbeData = 128;
2021-
20222024
size_t maxMsgR3SignedEncLen = EstimateStructOverhead(kMaxCHIPCertLength, // initiatorNOC
20232025
kMaxCHIPCertLength, // initiatorICAC
20242026
kMax_ECDSA_Signature_Length, // signature
@@ -2030,9 +2032,12 @@ CHIP_ERROR CASESession::ParseSigma3(ContiguousBufferTLVReader & tlvReader,
20302032
// Validate we did not receive a buffer larger than legal
20312033
VerifyOrReturnError(msgR3EncryptedLenWithTag <= maxMsgR3SignedEncLen, CHIP_ERROR_INVALID_TLV_ELEMENT);
20322034
VerifyOrReturnError(msgR3EncryptedLenWithTag > CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES, CHIP_ERROR_INVALID_TLV_ELEMENT);
2033-
VerifyOrReturnError(msgR3Encrypted.Alloc(msgR3EncryptedLenWithTag), CHIP_ERROR_NO_MEMORY);
2035+
VerifyOrReturnError(outMsgR3Encrypted.Alloc(msgR3EncryptedLenWithTag), CHIP_ERROR_NO_MEMORY);
2036+
ReturnErrorOnFailure(tlvReader.GetBytes(outMsgR3Encrypted.Get(), outMsgR3Encrypted.AllocatedSize()));
20342037

2035-
ReturnErrorOnFailure(tlvReader.GetBytes(msgR3Encrypted.Get(), msgR3Encrypted.AllocatedSize()));
2038+
size_t msgR3EncryptedPayloadLen = msgR3EncryptedLenWithTag - CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES;
2039+
outMsgR3EncryptedPayload = MutableByteSpan(outMsgR3Encrypted.Get(), msgR3EncryptedPayloadLen);
2040+
outMsgR3Mic = ByteSpan(outMsgR3Encrypted.Get() + msgR3EncryptedPayloadLen, CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES);
20362041

20372042
ReturnErrorOnFailure(tlvReader.ExitContainer(containerType));
20382043

@@ -2060,9 +2065,9 @@ CHIP_ERROR CASESession::ParseSigma3TBEData(ContiguousBufferTLVReader & decrypted
20602065
}
20612066

20622067
VerifyOrReturnError(decryptedDataTlvReader.GetTag() == AsTlvContextTag(TBEDataTags::kSignature), CHIP_ERROR_INVALID_TLV_TAG);
2063-
VerifyOrReturnError(outHandleSigma3TBEData.tbsData3Signature.Capacity() == decryptedDataTlvReader.GetLength(),
2064-
CHIP_ERROR_INVALID_TLV_ELEMENT);
2065-
outHandleSigma3TBEData.tbsData3Signature.SetLength(decryptedDataTlvReader.GetLength());
2068+
size_t signatureLen = decryptedDataTlvReader.GetLength();
2069+
VerifyOrReturnError(outHandleSigma3TBEData.tbsData3Signature.Capacity() == signatureLen, CHIP_ERROR_INVALID_TLV_ELEMENT);
2070+
outHandleSigma3TBEData.tbsData3Signature.SetLength(signatureLen);
20662071
ReturnErrorOnFailure(decryptedDataTlvReader.GetBytes(outHandleSigma3TBEData.tbsData3Signature.Bytes(),
20672072
outHandleSigma3TBEData.tbsData3Signature.Length()));
20682073

src/protocols/secure_channel/CASESession.h

+83-7
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ class DLL_EXPORT CASESession : public Messaging::UnsolicitedMessageHandler,
221221

222222
struct ParsedSigma1 : Sigma1Param
223223
{
224+
// Backed by: Sigma1 PacketBuffer passed to the method HandleSigma1()
225+
// Lifetime: Valid for the lifetime of the tlvReader, which takes ownership of the Sigma1 PacketBuffer in the HandleSigma1()
226+
// method.
224227
ByteSpan initiatorEphPubKey;
225228
bool initiatorSessionParamStructPresent = false;
226229
SessionParameters initiatorSessionParams;
@@ -239,20 +242,30 @@ class DLL_EXPORT CASESession : public Messaging::UnsolicitedMessageHandler,
239242
};
240243
struct ParsedSigma2
241244
{
245+
// Below ByteSpans are Backed by: Sigma2 PacketBuffer passed to the method HandleSigma2()
246+
// Lifetime: Valid for the lifetime of the tlvReader, which takes ownership of the Sigma2 PacketBuffer in the HandleSigma2()
247+
// method.
242248
ByteSpan responderRandom;
243-
uint16_t responderSessionId;
244249
ByteSpan responderEphPubKey;
250+
245251
Platform::ScopedMemoryBufferWithSize<uint8_t> msgR2Encrypted;
246-
bool responderSessionParamStructPresent = false;
252+
// Below ByteSpans are Backed by: msgR2Encrypted buffer
253+
// Lifetime: Valid as long as msgR2Encrypted is not released
254+
MutableByteSpan msgR2EncryptedPayload;
255+
ByteSpan msgR2Mic;
247256
SessionParameters responderSessionParams;
257+
uint16_t responderSessionId;
258+
bool responderSessionParamStructPresent = false;
248259
};
249260

250261
struct ParsedSigma2TBEData
251262
{
263+
// Below ByteSpans are Backed by: msgR2Encrypted Buffer, member of ParsedSigma2 struct
264+
// Lifetime: Valid for the lifetime of the instance of ParsedSigma2 that contains the msgR2Encrypted Buffer.
252265
ByteSpan responderNOC;
253266
ByteSpan responderICAC;
254-
Crypto::P256ECDSASignature tbsData2Signature;
255267
ByteSpan resumptionId;
268+
Crypto::P256ECDSASignature tbsData2Signature;
256269
};
257270

258271
struct EncodeSigma2ResumeInputs
@@ -266,10 +279,13 @@ class DLL_EXPORT CASESession : public Messaging::UnsolicitedMessageHandler,
266279

267280
struct ParsedSigma2Resume
268281
{
282+
// Below ByteSpans are Backed by: Sigma2Resume PacketBuffer passed to the method HandleSigma2Resume()
283+
// Lifetime: Valid for the lifetime of the tlvReader, which takes ownership of the Sigma2Resume PacketBuffer in the
284+
// HandleSigma2Resume() method.
269285
ByteSpan resumptionId;
270286
ByteSpan sigma2ResumeMIC;
271-
uint16_t responderSessionId;
272287
SessionParameters responderSessionParams;
288+
uint16_t responderSessionId;
273289
bool responderSessionParamStructPresent = false;
274290
};
275291

@@ -301,6 +317,8 @@ class DLL_EXPORT CASESession : public Messaging::UnsolicitedMessageHandler,
301317
chip::Platform::ScopedMemoryBuffer<uint8_t> msgR3Signed;
302318
size_t msgR3SignedLen;
303319

320+
// Below ByteSpans are Backed by: msgR3Encrypted Buffer, local to the HandleSigma3a() method,
321+
// The Spans are later modified to point to the msgR3Signed member of this struct.
304322
ByteSpan initiatorNOC;
305323
ByteSpan initiatorICAC;
306324

@@ -348,10 +366,40 @@ class DLL_EXPORT CASESession : public Messaging::UnsolicitedMessageHandler,
348366
*/
349367
static CHIP_ERROR ParseSigma1(TLV::ContiguousBufferTLVReader & tlvReader, ParsedSigma1 & parsedMessage);
350368

351-
static CHIP_ERROR ParseSigma2(TLV::ContiguousBufferTLVReader & tlvReader, ParsedSigma2 & parsedMessage);
369+
/**
370+
* Parse a Sigma2 message. This function will return success only if the
371+
* message passes schema checks.
372+
*
373+
* @param tlvReader a reference to the TLVReader that has ownership of the Sigma2 PacketBuffer.
374+
* @param outParsedSigma2 a reference to ParsedSigma2. All members of parsedMessage will stay valid as long as tlvReader is
375+
* valid.
376+
*
377+
* @note Calls to this function must always be made with a newly created and fresh ParsedSigma2 parameter.
378+
**/
379+
static CHIP_ERROR ParseSigma2(TLV::ContiguousBufferTLVReader & tlvReader, ParsedSigma2 & outParsedSigma2);
352380

353-
static CHIP_ERROR ParseSigma2TBEData(TLV::ContiguousBufferTLVReader & tlvReader, ParsedSigma2TBEData & parsedMessage);
381+
/**
382+
* Parse a decrypted TBEData2Encrypted message. This function will return success only if the message passes schema checks.
383+
*
384+
* @param tlvReader a reference to the TLVReader that points to the decrypted TBEData2Encrypted buffer (i.e.
385+
* msgR2Encrypted member of ParsedSigma2 struct)
386+
* @param outParsedSigma2TBEData a reference to ParsedSigma2TBEData. All members of parsedMessage will stay valid as long
387+
* as the msgR2Encrypted member of ParsedSigma2 is valid
388+
*
389+
* @note Calls to this function must always be made with a newly created and fresh ParsedSigma2TBEData parameter.
390+
**/
391+
static CHIP_ERROR ParseSigma2TBEData(TLV::ContiguousBufferTLVReader & tlvReader, ParsedSigma2TBEData & outParsedSigma2TBEData);
354392

393+
/**
394+
* Parse a Sigma2Resume message. This function will return success only if the
395+
* message passes schema checks.
396+
*
397+
* @param tlvReader a reference to the TLVReader that has ownership of the Sigma2Resume PacketBuffer.
398+
* @param outParsedSigma2Resume a reference to ParsedSigma2Resume. All members of parsedMessage will stay valid as long
399+
* as tlvReader is valid.
400+
*
401+
* @note Calls to this function must always be made with a newly created and fresh ParsedSigma2Resume parameter.
402+
**/
355403
static CHIP_ERROR ParseSigma2Resume(TLV::ContiguousBufferTLVReader & tlvReader, ParsedSigma2Resume & outParsedSigma2Resume);
356404

357405
/**
@@ -380,9 +428,37 @@ class DLL_EXPORT CASESession : public Messaging::UnsolicitedMessageHandler,
380428
**/
381429
static CHIP_ERROR EncodeSigma2Resume(System::PacketBufferHandle & outMsg, EncodeSigma2ResumeInputs & inParam);
382430

431+
/**
432+
* Parse a Sigma3 message. This function will return success only if the
433+
* message passes schema checks.
434+
*
435+
* @param tlvReader a reference to the TLVReader that has ownership of the Sigma3 PacketBuffer.
436+
*
437+
* @param outMsgR3Encrypted The encrypted3 (TBEData3Encrypted) TLV element. This will be a buffer that is owned by the caller
438+
* but is allocated and initialised within ParseSigma3. Calls to this function must always be made with
439+
* a newly created and fresh outMsgR3Encrypted
440+
*
441+
* @param outMsgR3EncryptedPayload reference to a span that will be set to point to the payload of outMsgR3Encrypted within
442+
* ParseSigma3. Calls to this function must always be made with a newly created and fresh
443+
* outMsgR3Mic
444+
*
445+
* @param outMsgR3Mic reference to a span that will be set to point to the MIC of outMsgR3Encrypted within ParseSigma3.
446+
* Calls to this function must always be made with a newly created and fresh outMsgR3Mic
447+
*
448+
* @note all out parameters will be valid as long the Buffer outMsgR3Encrypted is valid.
449+
**/
383450
static CHIP_ERROR ParseSigma3(TLV::ContiguousBufferTLVReader & tlvReader,
384-
Platform::ScopedMemoryBufferWithSize<uint8_t> & msgR3Encrypted);
451+
Platform::ScopedMemoryBufferWithSize<uint8_t> & outMsgR3Encrypted,
452+
MutableByteSpan & outMsgR3EncryptedPayload, ByteSpan & outMsgR3Mic);
385453

454+
/**
455+
* Parse a decrypted TBEData3Encrypted message. This function will return success only if the
456+
* message passes schema checks.
457+
*
458+
* @param tlvReader a reference to the TLVReader that points to the decrypted TBEData3Encrypted buffer.
459+
* @param data a reference to HandleSigma3Data.
460+
*
461+
**/
386462
static CHIP_ERROR ParseSigma3TBEData(TLV::ContiguousBufferTLVReader & tlvReader, HandleSigma3Data & data);
387463

388464
private:

0 commit comments

Comments
 (0)