Provides native libraries from the Tor website as pacakges for supported operating systems
When publishing, the correct binaries are copied directly to the output folder. If in debug or non-publish build, the files can be found under
runtimes/{rid}/{arch}/native
public static class TorResolver
{
/// <summary>
/// Attempts to locate the tor executable, returning the full path if found.
/// </summary>
/// <remarks>
/// Currently not supported on linux platforms
/// </remarks>
[UnsupportedOSPlatform("ios")]
[UnsupportedOSPlatform("linux")]
[UnsupportedOSPlatform("android")]
public static string LocateTorExecutable()
{
var filename = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "tor.exe" : "tor";
return EnumeratePotentialDirectories().Select(targetDir => Path.Combine(targetDir, filename)).FirstOrDefault(File.Exists);
}
private static IEnumerable<string> EnumeratePotentialDirectories()
{
// app dir (in case of published program)
yield return AppDomain.CurrentDomain.BaseDirectory;
// native executable location (debug/local build)
string platformName;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
platformName = "win";
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
platformName = "osx";
}
else
{
throw new PlatformNotSupportedException("OnionFruit NativeLibs are currently only available on Windows and macOS");
}
var genericRid = $"{platformName}-{RuntimeInformation.OSArchitecture.ToString().ToLowerInvariant()}";
yield return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "runtimes", genericRid, "native");
}
}To ease the development experience on macOS, all files are resigned by the build server using a blank certificate and library validation disabled. If redistributing, it is strongly recommended to resign the binaries before distributing and enabling such protections.
The project is licensed under the MIT Licence. Please note the Tor is distributed under a different license, which has been provided with the binaries