xpTURN.Atropos
0.1.1
dotnet add package xpTURN.Atropos --version 0.1.1
NuGet\Install-Package xpTURN.Atropos -Version 0.1.1
<PackageReference Include="xpTURN.Atropos" Version="0.1.1" />
<PackageVersion Include="xpTURN.Atropos" Version="0.1.1" />
<PackageReference Include="xpTURN.Atropos" />
paket add xpTURN.Atropos --version 0.1.1
#r "nuget: xpTURN.Atropos, 0.1.1"
#:package xpTURN.Atropos@0.1.1
#addin nuget:?package=xpTURN.Atropos&version=0.1.1
#tool nuget:?package=xpTURN.Atropos&version=0.1.1
xpTURN.Atropos
Dependency-free, Zero-GC-oriented pure C# Ed25519 (RFC 8032, plain PureEdDSA) sign/verify primitive for Unity (IL2CPP/AOT-safe) and Godot. No native libs, no DLLs, no Klotho dependency — designed to be split out as a standalone project.
Public API
Ed25519 is the only public type — plain Ed25519 (no context, no prehash), RFC 8032 deterministic (signatures
byte-identical across any conformant implementation). Every operation allocates zero heap after a one-time
per-thread warm-up, is thread-safe, and Verify rejects non-canonical signatures (non-malleable). All I/O is
Span<byte>; sizes: SeedSize 32, PublicKeySize 32, SignatureSize 64.
Derive a public key from a 32-byte private seed:
using xpTURN.Atropos;
Span<byte> publicKey = stackalloc byte[Ed25519.PublicKeySize]; // 32
Ed25519.DerivePublicKey(seed /* 32 B */, publicKey);
Sign a message with the seed (writes a 64-byte signature):
Span<byte> signature = stackalloc byte[Ed25519.SignatureSize]; // 64
Ed25519.Sign(seed /* 32 B */, message, signature);
Verify a signature against the public key:
bool ok = Ed25519.Verify(publicKey, message, signature);
Installation
Unity (UPM)
- Open Window > Package Manager
- Click + > Add package from git URL...
- Enter:
https://github.com/xpTURN/Atropos.git?path=com.xpturn.atropos
Assembly Definition usage
If your project uses Assembly Definition (.asmdef), add a reference to this package's runtime assembly in any asmdef that calls the API.
- Select your Assembly Definition (.asmdef) file and open it in the Inspector.
- Under References, click + and add xpTURN.Atropos.
NuGet (.NET / Godot)
dotnet add package xpTURN.Atropos
Ships netstandard2.1 + net8.0.
From source
ProjectReference the Server~/xpTURN.Atropos/xpTURN.Atropos.csproj mirror, or <Compile Include>
Runtime/**/*.cs.
Third-party
Ed25519 ref10 math + SHA-512 are vendored from Chaos.NaCl (public domain). See Runtime/ThirdParty/Ed25519/LICENSE.txt and PROVENANCE.md for the pinned source commit and the local-modification log.
Performance
Zero allocation on every operation, with latency competitive with BouncyCastle. Measured (net8 Release, Apple-silicon desktop; a comparison against BouncyCastle 2.5.1 as a reference — machine-dependent, relative):
| op | Atropos µs/op | Atropos B/op | BouncyCastle µs/op | BouncyCastle B/op | Latency ×vs BC |
|---|---|---|---|---|---|
| DerivePublicKey | 23.2 | 0 | 26.0 | 1,776 | 1.12× |
| Sign (msg 160 B) | 47.3 | 0 | 53.7 | 3,448 | 1.14× |
| Verify (msg 160 B) | 62.5 | 0 | 55.0 | 6,176 | 0.88× |
- Latency ×vs BC = BouncyCastle µs ÷ Atropos µs; >1 means Atropos is faster. Derive/Sign run ~1.1× faster; Verify trails by ~12% on this host, offset by 0 allocation.
- 0 bytes/op vs 1.8–6.2 KB/op, and a ~28× smaller code footprint with no dependency.
- Field arithmetic uses an even/odd (radix-2⁵¹) Karatsuba
fe_mul/fe_sqwith the hot small ops inlined. - Numbers are machine-dependent (an x86 host enables BouncyCastle's SIMD paths); treat as relative.
Reproduce:
dotnet run -c Release --project Server~/xpTURN.Atropos.Bench
License
Apache-2.0 (see LICENSE.md) for the Atropos wrapper/facade code. Vendored ThirdParty/ retains
its upstream public-domain dedication.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.1 | 224 | 7/5/2026 |