@@ -40,6 +40,19 @@ webrtc::FrameCryptorTransformer::Algorithm AlgorithmToFrameCryptorAlgorithm(
4040 }
4141}
4242
43+ webrtc::KeyDerivationAlgorithm
44+ KeyDerivationAlgorithmToFrameCryptorKeyDerivationAlgorithm (
45+ KeyDerivationAlgorithm algorithm) {
46+ switch (algorithm) {
47+ case KeyDerivationAlgorithm::PBKDF2 :
48+ return webrtc::KeyDerivationAlgorithm::kPBKDF2 ;
49+ case KeyDerivationAlgorithm::HKDF :
50+ return webrtc::KeyDerivationAlgorithm::kHKDF ;
51+ default :
52+ return webrtc::KeyDerivationAlgorithm::kPBKDF2 ;
53+ }
54+ }
55+
4356KeyProvider::KeyProvider (KeyProviderOptions options) {
4457 webrtc::KeyProviderOptions rtc_options;
4558 rtc_options.shared_key = options.shared_key ;
@@ -51,7 +64,10 @@ KeyProvider::KeyProvider(KeyProviderOptions options) {
5164 rtc_options.ratchet_salt = ratchet_salt;
5265 rtc_options.ratchet_window_size = options.ratchet_window_size ;
5366 rtc_options.failure_tolerance = options.failure_tolerance ;
54-
67+ rtc_options.key_ring_size = options.key_ring_size ;
68+ rtc_options.key_derivation_algorithm =
69+ KeyDerivationAlgorithmToFrameCryptorKeyDerivationAlgorithm (
70+ options.key_derivation_algorithm );
5571 impl_ =
5672 new rtc::RefCountedObject<webrtc::DefaultKeyProviderImpl>(rtc_options);
5773}
@@ -154,10 +170,12 @@ int32_t FrameCryptor::key_index() const {
154170 return e2ee_transformer_->key_index ();
155171}
156172
157- DataPacketCryptor::DataPacketCryptor (webrtc::FrameCryptorTransformer::Algorithm algorithm,
158- webrtc::scoped_refptr<webrtc::KeyProvider> key_provider)
173+ DataPacketCryptor::DataPacketCryptor (
174+ webrtc::FrameCryptorTransformer::Algorithm algorithm,
175+ webrtc::scoped_refptr<webrtc::KeyProvider> key_provider)
159176 : data_packet_cryptor_(
160- webrtc::make_ref_counted<webrtc::DataPacketCryptor>(algorithm, key_provider)) {}
177+ webrtc::make_ref_counted<webrtc::DataPacketCryptor>(algorithm,
178+ key_provider)) {}
161179
162180EncryptedPacket DataPacketCryptor::encrypt_data_packet (
163181 const ::rust::String participant_id,
@@ -167,12 +185,12 @@ EncryptedPacket DataPacketCryptor::encrypt_data_packet(
167185 std::copy (data.begin (), data.end (), std::back_inserter (data_vec));
168186
169187 auto result = data_packet_cryptor_->Encrypt (
170- std::string (participant_id.data (), participant_id.size ()),
171- key_index,
188+ std::string (participant_id.data (), participant_id.size ()), key_index,
172189 data_vec);
173190
174191 if (!result.ok ()) {
175- throw std::runtime_error (std::string (" Failed to encrypt data packet: " ) + result.error ().message ());
192+ throw std::runtime_error (std::string (" Failed to encrypt data packet: " ) +
193+ result.error ().message ());
176194 }
177195
178196 auto & packet = result.value ();
@@ -202,20 +220,23 @@ rust::Vec<::std::uint8_t> DataPacketCryptor::decrypt_data_packet(
202220 std::copy (encrypted_packet.iv .begin (), encrypted_packet.iv .end (),
203221 std::back_inserter (iv_vec));
204222
205- auto native_encrypted_packet = webrtc::make_ref_counted<webrtc::EncryptedPacket>(
206- std::move (data_vec), std::move (iv_vec), encrypted_packet.key_index );
223+ auto native_encrypted_packet =
224+ webrtc::make_ref_counted<webrtc::EncryptedPacket>(
225+ std::move (data_vec), std::move (iv_vec), encrypted_packet.key_index );
207226
208227 auto result = data_packet_cryptor_->Decrypt (
209228 std::string (participant_id.data (), participant_id.size ()),
210229 native_encrypted_packet);
211230
212231 if (!result.ok ()) {
213- throw std::runtime_error (std::string (" Failed to decrypt data packet: " ) + result.error ().message ());
232+ throw std::runtime_error (std::string (" Failed to decrypt data packet: " ) +
233+ result.error ().message ());
214234 }
215235
216236 rust::Vec<uint8_t > decrypted_data;
217237 auto & decrypted = result.value ();
218- std::copy (decrypted.begin (), decrypted.end (), std::back_inserter (decrypted_data));
238+ std::copy (decrypted.begin (), decrypted.end (),
239+ std::back_inserter (decrypted_data));
219240 return decrypted_data;
220241}
221242
0 commit comments