@@ -354,7 +354,10 @@ void FrameCryptorTransformer::encryptFrame(
354354 return ;
355355 }
356356
357- auto key_handler = key_provider_->GetKey (participant_id_);
357+ auto key_handler = key_provider_->options ().shared_key
358+ ? key_provider_->GetSharedKey (participant_id_)
359+ : key_provider_->GetKey (participant_id_);
360+
358361 if (key_handler == nullptr || key_handler->GetKeySet (key_index_) == nullptr ) {
359362 RTC_LOG (LS_INFO) << " FrameCryptorTransformer::encryptFrame() no keys, or "
360363 " key_index["
@@ -462,30 +465,31 @@ void FrameCryptorTransformer::decryptFrame(
462465 sink_callback->OnTransformedFrame (std::move (frame));
463466 return ;
464467 }
465-
468+
466469 auto uncrypted_magic_bytes = key_provider_->options ().uncrypted_magic_bytes ;
467470 if (uncrypted_magic_bytes.size () > 0 &&
468471 date_in.size () >= uncrypted_magic_bytes.size () + 1 ) {
469- auto tmp = date_in.subview (date_in.size () - (uncrypted_magic_bytes.size () + 1 ),
470- uncrypted_magic_bytes.size ());
472+ auto tmp =
473+ date_in.subview (date_in.size () - (uncrypted_magic_bytes.size () + 1 ),
474+ uncrypted_magic_bytes.size ());
471475
472476 if (uncrypted_magic_bytes == std::vector<uint8_t >(tmp.begin (), tmp.end ())) {
473-
474477 RTC_CHECK_EQ (tmp.size (), uncrypted_magic_bytes.size ());
475478 auto frame_type = date_in.subview (date_in.size () - 1 , 1 );
476479 RTC_CHECK_EQ (frame_type.size (), 1 );
477480
478- RTC_LOG (LS_INFO) << " FrameCryptorTransformer::uncrypted_magic_bytes( type "
479- << frame_type[ 0 ] << " , tmp "
480- << to_hex (tmp.data (), tmp.size ()) << " , magic bytes "
481- << to_hex (uncrypted_magic_bytes. data (),
482- uncrypted_magic_bytes.size ())
483- << " )" ;
481+ RTC_LOG (LS_INFO)
482+ << " FrameCryptorTransformer::uncrypted_magic_bytes( type "
483+ << frame_type[ 0 ] << " , tmp " << to_hex (tmp.data (), tmp.size ())
484+ << " , magic bytes "
485+ << to_hex (uncrypted_magic_bytes. data (), uncrypted_magic_bytes.size ())
486+ << " )" ;
484487
485- // magic bytes detected, this is a non-encrypted frame, skip frame decryption.
488+ // magic bytes detected, this is a non-encrypted frame, skip frame
489+ // decryption.
486490 rtc::Buffer data_out;
487- data_out.AppendData (
488- date_in. subview ( 0 , date_in.size () - uncrypted_magic_bytes.size () - 1 ));
491+ data_out.AppendData (date_in. subview (
492+ 0 , date_in.size () - uncrypted_magic_bytes.size () - 1 ));
489493 frame->SetData (data_out);
490494 sink_callback->OnTransformedFrame (std::move (frame));
491495 return ;
@@ -518,7 +522,10 @@ void FrameCryptorTransformer::decryptFrame(
518522 return ;
519523 }
520524
521- auto key_handler = key_provider_->GetKey (participant_id_);
525+ auto key_handler = key_provider_->options ().shared_key
526+ ? key_provider_->GetSharedKey (participant_id_)
527+ : key_provider_->GetKey (participant_id_);
528+
522529 if (key_index >= KEYRING_SIZE || key_handler == nullptr ||
523530 key_handler->GetKeySet (key_index) == nullptr ) {
524531 RTC_LOG (LS_INFO) << " FrameCryptorTransformer::decryptFrame() no keys, or "
@@ -534,10 +541,10 @@ void FrameCryptorTransformer::decryptFrame(
534541 return ;
535542 }
536543
537- if (last_dec_error_ == kDecryptionFailed && !key_handler->have_valid_key ) {
538- // if decryption failed and we have an invalid key,
539- // please try to decrypt with the next new key
540- return ;
544+ if (last_dec_error_ == kDecryptionFailed && !key_handler->HasValidKey () ) {
545+ // if decryption failed and we have an invalid key,
546+ // please try to decrypt with the next new key
547+ return ;
541548 }
542549
543550 auto key_set = key_handler->GetKeySet (key_index);
@@ -565,25 +572,28 @@ void FrameCryptorTransformer::decryptFrame(
565572 RTC_LOG (LS_ERROR) << " FrameCryptorTransformer::decryptFrame() failed" ;
566573 std::shared_ptr<ParticipantKeyHandler::KeySet> ratcheted_key_set;
567574 auto currentKeyMaterial = key_set->material ;
568- if (key_handler ->options ().ratchet_window_size > 0 ) {
569- while (ratchet_count < key_handler ->options ().ratchet_window_size ) {
575+ if (key_provider_ ->options ().ratchet_window_size > 0 ) {
576+ while (ratchet_count < key_provider_ ->options ().ratchet_window_size ) {
570577 ratchet_count++;
571578
572579 RTC_LOG (LS_INFO) << " ratcheting key attempt " << ratchet_count << " of "
573- << key_handler ->options ().ratchet_window_size ;
580+ << key_provider_ ->options ().ratchet_window_size ;
574581
575582 auto new_material = key_handler->RatchetKeyMaterial (currentKeyMaterial);
576- ratcheted_key_set = key_handler->DeriveKeys (new_material, key_handler->options ().ratchet_salt , 128 );
583+ ratcheted_key_set = key_handler->DeriveKeys (
584+ new_material, key_provider_->options ().ratchet_salt , 128 );
577585
578586 if (AesEncryptDecrypt (EncryptOrDecrypt::kDecrypt , algorithm_,
579- ratcheted_key_set->encryption_key , iv, frame_header,
580- encrypted_payload, &buffer) == Success) {
587+ ratcheted_key_set->encryption_key , iv,
588+ frame_header, encrypted_payload,
589+ &buffer) == Success) {
581590 RTC_LOG (LS_INFO) << " FrameCryptorTransformer::decryptFrame() "
582591 " ratcheted to key_index="
583592 << static_cast <int >(key_index);
584593 decryption_success = true ;
585594 // success, so we set the new key
586595 key_handler->SetKeyFromMaterial (new_material, key_index);
596+ key_handler->SetHasValidKey (true );
587597 if (last_dec_error_ != FrameCryptionState::kKeyRatcheted ) {
588598 last_dec_error_ = FrameCryptionState::kKeyRatcheted ;
589599 if (observer_)
@@ -603,7 +613,7 @@ void FrameCryptorTransformer::decryptFrame(
603613 times, we come back to the initial key.
604614 */
605615 if (!decryption_success ||
606- ratchet_count >= key_handler ->options ().ratchet_window_size ) {
616+ ratchet_count >= key_provider_ ->options ().ratchet_window_size ) {
607617 key_handler->SetKeyFromMaterial (initialKeyMaterial, key_index);
608618 }
609619 }
@@ -612,7 +622,7 @@ void FrameCryptorTransformer::decryptFrame(
612622 if (!decryption_success) {
613623 if (last_dec_error_ != FrameCryptionState::kDecryptionFailed ) {
614624 last_dec_error_ = FrameCryptionState::kDecryptionFailed ;
615- key_handler->have_valid_key = false ;
625+ key_handler->SetHasValidKey ( false ) ;
616626 if (observer_)
617627 observer_->OnFrameCryptionStateChanged (participant_id_,
618628 last_dec_error_);
@@ -629,7 +639,8 @@ void FrameCryptorTransformer::decryptFrame(
629639 RTC_LOG (LS_INFO) << " FrameCryptorTransformer::decryptFrame() ivLength="
630640 << static_cast <int >(ivLength) << " unencrypted_bytes="
631641 << static_cast <int >(unencrypted_bytes)
632- << " key_index=" << static_cast <int >(key_index_) << " aesKey="
642+ << " key_index=" << static_cast <int >(key_index_)
643+ << " aesKey="
633644 << to_hex (key_set->encryption_key .data (),
634645 key_set->encryption_key .size ())
635646 << " iv=" << to_hex (iv.data (), iv.size ());
0 commit comments