Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/mls-rs/src/test_utils/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 3 kB image not shown  

Quelle  fuzz_tests.rs   Sprache: unbekannt

 
Spracherkennung für: .rs vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

use std::sync::Mutex;

use mls_rs_core::{
    crypto::{CipherSuiteProvider, CryptoProvider, SignatureSecretKey},
    identity::BasicCredential,
};

use once_cell::sync::Lazy;

use crate::{
    cipher_suite::CipherSuite,
    client::MlsError,
    client_builder::{BaseConfig, WithCryptoProvider, WithIdentityProvider},
    group::{
        framing::{Content, MlsMessage, Sender, WireFormat},
        message_processor::MessageProcessor,
        message_signature::AuthenticatedContent,
        Commit, Group,
    },
    identity::{basic::BasicIdentityProvider, SigningIdentity},
    Client, ExtensionList,
};

#[cfg(awslc)]
pub use mls_rs_crypto_awslc::AwsLcCryptoProvider as MlsCryptoProvider;
#[cfg(not(any(awslc, rustcrypto)))]
pub use mls_rs_crypto_openssl::OpensslCryptoProvider as MlsCryptoProvider;
#[cfg(rustcrypto)]
pub use mls_rs_crypto_rustcrypto::RustCryptoProvider as MlsCryptoProvider;

pub type TestClientConfig =
    WithIdentityProvider<BasicIdentityProvider, WithCryptoProvider<MlsCryptoProvider, BaseConfig>>;

pub static GROUP: Lazy<Mutex<Group<TestClientConfig>>> = Lazy::new(|| Mutex::new(create_group()));

pub fn create_group() -> Group<TestClientConfig> {
    let cipher_suite = CipherSuite::CURVE25519_AES128;
    let alice = make_client(cipher_suite, "alice");
    let bob = make_client(cipher_suite, "bob");

    let mut alice = alice.create_group(ExtensionList::new()).unwrap();

    alice
        .commit_builder()
        .add_member(bob.generate_key_package_message().unwrap())
        .unwrap()
        .build()
        .unwrap();

    alice.apply_pending_commit().unwrap();

    alice
}

pub fn create_fuzz_commit_message(
    group_id: Vec<u8>,
    epoch: u64,
    authenticated_data: Vec<u8>,
) -> Result<MlsMessage, MlsError> {
    let mut group = GROUP.lock().unwrap();

    let mut context = group.context().clone();
    context.group_id = group_id;
    context.epoch = epoch;

    #[cfg(feature = "private_message")]
    let wire_format = WireFormat::PrivateMessage;

    #[cfg(not(feature = "private_message"))]
    let wire_format = WireFormat::PublicMessage;

    let auth_content = AuthenticatedContent::new_signed(
        group.cipher_suite_provider(),
        &context,
        Sender::Member(0),
        Content::Commit(alloc::boxed::Box::new(Commit {
            proposals: Vec::new(),
            path: None,
        })),
        &group.signer,
        wire_format,
        authenticated_data,
    )?;

    group.format_for_wire(auth_content)
}

fn make_client(cipher_suite: CipherSuite, name: &str) -> Client<TestClientConfig> {
    let (secret, signing_identity) = make_identity(cipher_suite, name);

    // TODO : consider fuzzing on encrypted controls (doesn't seem very useful)
    Client::builder()
        .identity_provider(BasicIdentityProvider)
        .crypto_provider(MlsCryptoProvider::default())
        .signing_identity(signing_identity, secret, cipher_suite)
        .build()
}

fn make_identity(cipher_suite: CipherSuite, name: &str) -> (SignatureSecretKey, SigningIdentity) {
    let cipher_suite = MlsCryptoProvider::new()
        .cipher_suite_provider(cipher_suite)
        .unwrap();

    let (secret, public) = cipher_suite.signature_key_generate().unwrap();
    let basic_identity = BasicCredential::new(name.as_bytes().to_vec());
    let signing_identity = SigningIdentity::new(basic_identity.into_credential(), public);

    (secret, signing_identity)
}

[ Dauer der Verarbeitung: 0.37 Sekunden  ]