jnacl is a library that implements some of Daniel J. Bernstein's NaCl encryption primitives. The functions are written in pure Java, and are therefore very straight-forward to make use of in a Java application without the use of native libraries and bindings.

The following primitives are included:

  • curve25519: Elliptic curve key agreement
  • salsa20: Stream cipher
  • poly1305: Message authenticator (MAC)

It is open-source and available on GitHub

Even though it has not been comprehensively benchmarked, jnacl performs exceptionally well, even on resource-constrained Android platforms.