Skip to content

Commit 330375c

Browse files
committed
Allow setting keyring-size from Rust
1 parent c3ec0ea commit 330375c

4 files changed

Lines changed: 24 additions & 10 deletions

File tree

libwebrtc/src/native/frame_cryptor.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ pub struct KeyProviderOptions {
3131
pub ratchet_window_size: i32,
3232
pub ratchet_salt: Vec<u8>,
3333
pub failure_tolerance: i32,
34+
pub key_ring_size: i32,
3435
}
3536

3637
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -272,6 +273,7 @@ impl From<KeyProviderOptions> for sys_fc::ffi::KeyProviderOptions {
272273
ratchet_window_size: value.ratchet_window_size,
273274
ratchet_salt: value.ratchet_salt,
274275
failure_tolerance: value.failure_tolerance,
276+
key_ring_size: value.key_ring_size,
275277
}
276278
}
277279
}

livekit/src/room/e2ee/key_provider.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ use crate::id::ParticipantIdentity;
2323
const DEFAULT_RATCHET_SALT: &str = "LKFrameEncryptionKey";
2424
const DEFAULT_RATCHET_WINDOW_SIZE: i32 = 16;
2525
const DEFAULT_FAILURE_TOLERANCE: i32 = -1; // no tolerance by default
26+
const DEFAULT_KEY_RING_SIZE: i32 = 16;
2627

2728
#[derive(Clone)]
2829
pub struct KeyProviderOptions {
2930
pub ratchet_window_size: i32,
3031
pub ratchet_salt: Vec<u8>,
3132
pub failure_tolerance: i32,
33+
pub key_ring_size: i32,
3234
}
3335

3436
impl Default for KeyProviderOptions {
@@ -37,6 +39,7 @@ impl Default for KeyProviderOptions {
3739
ratchet_window_size: DEFAULT_RATCHET_WINDOW_SIZE,
3840
ratchet_salt: DEFAULT_RATCHET_SALT.to_owned().into_bytes(),
3941
failure_tolerance: DEFAULT_FAILURE_TOLERANCE,
42+
key_ring_size: DEFAULT_KEY_RING_SIZE,
4043
}
4144
}
4245
}
@@ -56,6 +59,7 @@ impl KeyProvider {
5659
ratchet_window_size: options.ratchet_window_size,
5760
ratchet_salt: options.ratchet_salt,
5861
failure_tolerance: options.failure_tolerance,
62+
key_ring_size: options.key_ring_size,
5963
}),
6064
latest_key_index: Arc::new(AtomicI32::new(0)),
6165
}
@@ -67,6 +71,7 @@ impl KeyProvider {
6771
ratchet_window_size: options.ratchet_window_size,
6872
ratchet_salt: options.ratchet_salt,
6973
failure_tolerance: options.failure_tolerance,
74+
key_ring_size: options.key_ring_size,
7075
});
7176
handle.set_shared_key(0, shared_key);
7277
Self { handle, latest_key_index: Arc::new(AtomicI32::new(0)) }

webrtc-sys/src/frame_cryptor.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ KeyProvider::KeyProvider(KeyProviderOptions options) {
5151
rtc_options.ratchet_salt = ratchet_salt;
5252
rtc_options.ratchet_window_size = options.ratchet_window_size;
5353
rtc_options.failure_tolerance = options.failure_tolerance;
54+
rtc_options.key_ring_size = options.key_ring_size;
5455

5556
impl_ =
5657
new rtc::RefCountedObject<webrtc::DefaultKeyProviderImpl>(rtc_options);
@@ -154,10 +155,12 @@ int32_t FrameCryptor::key_index() const {
154155
return e2ee_transformer_->key_index();
155156
}
156157

157-
DataPacketCryptor::DataPacketCryptor(webrtc::FrameCryptorTransformer::Algorithm algorithm,
158-
webrtc::scoped_refptr<webrtc::KeyProvider> key_provider)
158+
DataPacketCryptor::DataPacketCryptor(
159+
webrtc::FrameCryptorTransformer::Algorithm algorithm,
160+
webrtc::scoped_refptr<webrtc::KeyProvider> key_provider)
159161
: data_packet_cryptor_(
160-
webrtc::make_ref_counted<webrtc::DataPacketCryptor>(algorithm, key_provider)) {}
162+
webrtc::make_ref_counted<webrtc::DataPacketCryptor>(algorithm,
163+
key_provider)) {}
161164

162165
EncryptedPacket DataPacketCryptor::encrypt_data_packet(
163166
const ::rust::String participant_id,
@@ -167,12 +170,12 @@ EncryptedPacket DataPacketCryptor::encrypt_data_packet(
167170
std::copy(data.begin(), data.end(), std::back_inserter(data_vec));
168171

169172
auto result = data_packet_cryptor_->Encrypt(
170-
std::string(participant_id.data(), participant_id.size()),
171-
key_index,
173+
std::string(participant_id.data(), participant_id.size()), key_index,
172174
data_vec);
173175

174176
if (!result.ok()) {
175-
throw std::runtime_error(std::string("Failed to encrypt data packet: ") + result.error().message());
177+
throw std::runtime_error(std::string("Failed to encrypt data packet: ") +
178+
result.error().message());
176179
}
177180

178181
auto& packet = result.value();
@@ -202,20 +205,23 @@ rust::Vec<::std::uint8_t> DataPacketCryptor::decrypt_data_packet(
202205
std::copy(encrypted_packet.iv.begin(), encrypted_packet.iv.end(),
203206
std::back_inserter(iv_vec));
204207

205-
auto native_encrypted_packet = webrtc::make_ref_counted<webrtc::EncryptedPacket>(
206-
std::move(data_vec), std::move(iv_vec), encrypted_packet.key_index);
208+
auto native_encrypted_packet =
209+
webrtc::make_ref_counted<webrtc::EncryptedPacket>(
210+
std::move(data_vec), std::move(iv_vec), encrypted_packet.key_index);
207211

208212
auto result = data_packet_cryptor_->Decrypt(
209213
std::string(participant_id.data(), participant_id.size()),
210214
native_encrypted_packet);
211215

212216
if (!result.ok()) {
213-
throw std::runtime_error(std::string("Failed to decrypt data packet: ") + result.error().message());
217+
throw std::runtime_error(std::string("Failed to decrypt data packet: ") +
218+
result.error().message());
214219
}
215220

216221
rust::Vec<uint8_t> decrypted_data;
217222
auto& decrypted = result.value();
218-
std::copy(decrypted.begin(), decrypted.end(), std::back_inserter(decrypted_data));
223+
std::copy(decrypted.begin(), decrypted.end(),
224+
std::back_inserter(decrypted_data));
219225
return decrypted_data;
220226
}
221227

webrtc-sys/src/frame_cryptor.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub mod ffi {
2525
pub ratchet_window_size: i32,
2626
pub ratchet_salt: Vec<u8>,
2727
pub failure_tolerance: i32,
28+
pub key_ring_size: i32,
2829
}
2930

3031
#[derive(Debug)]

0 commit comments

Comments
 (0)