tor-client-lib 0.3.1

A client library for the Tor API
Documentation
use anyhow::Result;
use ed25519_dalek::SigningKey;
use rand::rngs::OsRng;
use tor_client_lib::{
    control_connection::OnionServiceMapping, TorAuthentication, TorControlConnection,
    TorEd25519SigningKey, TorServiceId,
};

#[tokio::test]
async fn test_create_onion_service_from_ed25519_key() -> Result<()> {
    let mut connection = TorControlConnection::connect("127.0.0.1:9051").await?;
    connection.authenticate(&TorAuthentication::Null).await?;
    let signing_key = SigningKey::generate(&mut OsRng);
    let tor_signing_key: TorEd25519SigningKey = signing_key.clone().into();
    let verifying_key = tor_signing_key.verifying_key();
    let onion_service = connection
        .create_onion_service(
            &[OnionServiceMapping::new(3000, None)],
            true,
            Some(tor_signing_key),
        )
        .await?;

    assert_eq!(signing_key.verifying_key(), verifying_key);
    let signing_key_service_id: TorServiceId = signing_key.verifying_key().into();
    assert_eq!(onion_service.service_id(), &signing_key_service_id);

    Ok(())
}

#[tokio::test]
async fn test_create_onion_service_no_key() -> Result<()> {
    let mut connection = TorControlConnection::connect("127.0.0.1:9051").await?;
    connection.authenticate(&TorAuthentication::Null).await?;
    connection
        .create_onion_service(&[OnionServiceMapping::new(3000, None)], true, None)
        .await?;

    Ok(())
}