This repository is a demo for rustgo, a technique to directly call Rust code from Go programs with near-zero overhead, meant to replace manually written assembly.
You'd probably enjoy the article more.
edwards25519 implements operations on an Edwards curve that is isomorphic to curve25519 by wrapping the excellent pure-Rust curve25519-dalek library.
It exposes a Go interface, and can be imported, used and (cross-)compiled (but not installed) like a normal Go program. Benchmarks show this package to be more than 3 times faster than a pure-Go alternative.
To install using pre-built artifacts, download a tarball from the Releases page matching your Go version and untar it into
_haswell version is about 10% faster, but will only run on Haswell CPUs and newer.)
tar -C$GOPATH -xvf ed25519-dalek-rustgo_go1.8.3.tar.gz
That's it, you're ready to use the
To build from source, you'll need Go, Rust, make and a linker.
make install from the root of this repository, which must be checked out at the right place in
Cross-compilation is supported and based on
GOARCH. You'll need Rust setup and a linker for your target, specified with the
LD variable. Set the
MUSL environment variable to target
MUSL=1 GOOS=linux make clean install LD=x86_64-linux-musl-ld
RUSTFLAGS will target your native CPU.
Just what you're used to. Import it, call its functions,
go build your program.
Cross-compilation works normally, as long as a
.a was installed for the target. Binary distributions currently include darwin_amd64 and linux_amd64 pre-built archives.
The only function currently exposed is multiplication of a scalar by the Curve25519 basepoint into an Edwards compressed point. PRs to add more APIs are welcome.