@@ -602,35 +602,36 @@ CHIP_ERROR CASESession::DeriveSecureSession(CryptoContext & session)
602602 switch (mState )
603603 {
604604 case State::kFinished : {
605- std::array< uint8_t , sizeof (mIPK ) + kSHA256_Hash_Length > msg_salt;
605+ SensitiveDataFixedBuffer< sizeof (mIPK ) + kSHA256_Hash_Length > msg_salt;
606606
607607 {
608- Encoding::LittleEndian::BufferWriter bbuf (msg_salt);
608+ Encoding::LittleEndian::BufferWriter bbuf (msg_salt. Bytes (), msg_salt. Capacity () );
609609 bbuf.Put (mIPK , sizeof (mIPK ));
610610 bbuf.Put (mMessageDigest , sizeof (mMessageDigest ));
611611
612612 VerifyOrReturnError (bbuf.Fit (), CHIP_ERROR_BUFFER_TOO_SMALL);
613613 }
614614
615615 ReturnErrorOnFailure (session.InitFromSecret (*mSessionManager ->GetSessionKeystore (), mSharedSecret .Span (),
616- ByteSpan (msg_salt), CryptoContext::SessionInfoType:: kSessionEstablishment ,
617- mRole ));
616+ ByteSpan (msg_salt. ConstBytes ( ), msg_salt. Capacity ()) ,
617+ CryptoContext::SessionInfoType:: kSessionEstablishment , mRole ));
618618
619619 return CHIP_NO_ERROR;
620620 }
621621 case State::kFinishedViaResume : {
622- std::array< uint8_t , sizeof (mInitiatorRandom ) + decltype (mResumeResumptionId )().size ()> msg_salt;
622+ SensitiveDataFixedBuffer< sizeof (mInitiatorRandom ) + decltype (mResumeResumptionId )().size ()> msg_salt;
623623
624624 {
625- Encoding::LittleEndian::BufferWriter bbuf (msg_salt);
625+ Encoding::LittleEndian::BufferWriter bbuf (msg_salt. Bytes (), msg_salt. Capacity () );
626626 bbuf.Put (mInitiatorRandom , sizeof (mInitiatorRandom ));
627627 bbuf.Put (mResumeResumptionId .data (), mResumeResumptionId .size ());
628628
629629 VerifyOrReturnError (bbuf.Fit (), CHIP_ERROR_BUFFER_TOO_SMALL);
630630 }
631631
632632 ReturnErrorOnFailure (session.InitFromSecret (*mSessionManager ->GetSessionKeystore (), mSharedSecret .Span (),
633- ByteSpan (msg_salt), CryptoContext::SessionInfoType::kSessionResumption , mRole ));
633+ ByteSpan (msg_salt.ConstBytes (), msg_salt.Capacity ()),
634+ CryptoContext::SessionInfoType::kSessionResumption , mRole ));
634635
635636 return CHIP_NO_ERROR;
636637 }
@@ -642,6 +643,7 @@ CHIP_ERROR CASESession::DeriveSecureSession(CryptoContext & session)
642643CHIP_ERROR CASESession::RecoverInitiatorIpk ()
643644{
644645 Credentials::GroupDataProvider::KeySet ipkKeySet;
646+ auto ipkKeySetWiperOnScopeExit = ScopeExit ([&] { ipkKeySet.ClearKeys (); });
645647
646648 CHIP_ERROR err = mGroupDataProvider ->GetIpkKeySet (mFabricIndex , ipkKeySet);
647649
@@ -960,7 +962,8 @@ CHIP_ERROR CASESession::FindLocalNodeFromDestinationId(const ByteSpan & destinat
960962
961963 // Get IPK operational group key set for current candidate fabric
962964 GroupDataProvider::KeySet ipkKeySet;
963- CHIP_ERROR err = mGroupDataProvider ->GetIpkKeySet (fabricInfo.GetFabricIndex (), ipkKeySet);
965+ auto ipkKeySetWiperOnScopeExit = ScopeExit ([&] { ipkKeySet.ClearKeys (); });
966+ CHIP_ERROR err = mGroupDataProvider ->GetIpkKeySet (fabricInfo.GetFabricIndex (), ipkKeySet);
964967 if ((err != CHIP_NO_ERROR) ||
965968 ((ipkKeySet.num_keys_used == 0 ) || (ipkKeySet.num_keys_used > Credentials::GroupDataProvider::KeySet::kEpochKeysMax )))
966969 {
@@ -1197,9 +1200,9 @@ CHIP_ERROR CASESession::PrepareSigma2(EncodeSigma2Inputs & outSigma2Data)
11971200 // Generate a Shared Secret
11981201 ReturnErrorOnFailure (mEphemeralKey ->ECDH_derive_secret (mRemotePubKey , mSharedSecret ));
11991202
1200- uint8_t msgSalt[ kIPKSize + kSigmaParamRandomNumberSize + kP256_PublicKey_Length + kSHA256_Hash_Length ] ;
1203+ SensitiveDataFixedBuffer< kIPKSize + kSigmaParamRandomNumberSize + kP256_PublicKey_Length + kSHA256_Hash_Length > msgSalt ;
12011204
1202- MutableByteSpan saltSpan (msgSalt);
1205+ MutableByteSpan saltSpan (msgSalt. Bytes (), msgSalt. Capacity () );
12031206 ReturnErrorOnFailure (
12041207 ConstructSaltSigma2 (ByteSpan (outSigma2Data.responderRandom ), mEphemeralKey ->Pubkey (), ByteSpan (mIPK ), saltSpan));
12051208
@@ -1498,8 +1501,8 @@ CHIP_ERROR CASESession::HandleSigma2(System::PacketBufferHandle && msg)
14981501 // Generate the S2K key
14991502 AutoReleaseSessionKey sr2k (*mSessionManager ->GetSessionKeystore ());
15001503 {
1501- uint8_t msg_salt[ kIPKSize + kSigmaParamRandomNumberSize + kP256_PublicKey_Length + kSHA256_Hash_Length ] ;
1502- MutableByteSpan saltSpan (msg_salt);
1504+ SensitiveDataFixedBuffer< kIPKSize + kSigmaParamRandomNumberSize + kP256_PublicKey_Length + kSHA256_Hash_Length > msg_salt ;
1505+ MutableByteSpan saltSpan (msg_salt. Bytes (), msg_salt. Capacity () );
15031506 ReturnErrorOnFailure (ConstructSaltSigma2 (parsedSigma2.responderRandom , mRemotePubKey , ByteSpan (mIPK ), saltSpan));
15041507 ReturnErrorOnFailure (DeriveSigmaKey (saltSpan, ByteSpan (kKDFSR2Info ), sr2k));
15051508 }
@@ -1825,7 +1828,7 @@ CHIP_ERROR CASESession::SendSigma3c(SendSigma3Data & data, CHIP_ERROR status)
18251828 System::PacketBufferHandle msg_R3;
18261829 size_t data_len;
18271830
1828- uint8_t msg_salt[ kIPKSize + kSHA256_Hash_Length ] ;
1831+ SensitiveDataFixedBuffer< kIPKSize + kSHA256_Hash_Length > msg_salt ;
18291832
18301833 AutoReleaseSessionKey sr3k (*mSessionManager ->GetSessionKeystore ());
18311834
@@ -1835,7 +1838,7 @@ CHIP_ERROR CASESession::SendSigma3c(SendSigma3Data & data, CHIP_ERROR status)
18351838
18361839 // Generate S3K key
18371840 {
1838- MutableByteSpan saltSpan (msg_salt);
1841+ MutableByteSpan saltSpan (msg_salt. Bytes (), msg_salt. Capacity () );
18391842 SuccessOrExit (err = ConstructSaltSigma3 (ByteSpan (mIPK ), saltSpan));
18401843 SuccessOrExit (err = DeriveSigmaKey (saltSpan, ByteSpan (kKDFSR3Info ), sr3k));
18411844 }
@@ -1914,7 +1917,7 @@ CHIP_ERROR CASESession::HandleSigma3a(System::PacketBufferHandle && msg)
19141917
19151918 AutoReleaseSessionKey sr3k (*mSessionManager ->GetSessionKeystore ());
19161919
1917- uint8_t msg_salt[ kIPKSize + kSHA256_Hash_Length ] ;
1920+ SensitiveDataFixedBuffer< kIPKSize + kSHA256_Hash_Length > msg_salt ;
19181921
19191922 ChipLogProgress (SecureChannel, " Received Sigma3 msg" );
19201923 MATTER_TRACE_COUNTER (" Sigma3" );
@@ -1946,7 +1949,7 @@ CHIP_ERROR CASESession::HandleSigma3a(System::PacketBufferHandle && msg)
19461949 SuccessOrExit (err = ParseSigma3 (tlvReader, msgR3Encrypted, msgR3EncryptedPayload, msgR3MIC));
19471950
19481951 // Generate the S3K key
1949- MutableByteSpan saltSpan (msg_salt);
1952+ MutableByteSpan saltSpan (msg_salt. Bytes (), msg_salt. Capacity () );
19501953 SuccessOrExit (err = ConstructSaltSigma3 (ByteSpan (mIPK ), saltSpan));
19511954 SuccessOrExit (err = DeriveSigmaKey (saltSpan, ByteSpan (kKDFSR3Info ), sr3k));
19521955
0 commit comments