Java implementation of scrypt
Shell Java C
Pull request Compare This branch is 3 commits ahead, 9 commits behind wg:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Java Implementation of scrypt

  A pure Java implementation of the scrypt key derivation function,
  and JNI bindings for the SSE-optimized C implementation.

  The Java implementation is based in large part on Colin Percival's
  reference implementation contained in
  scrypt-1.1.6/lib/crypto/crypto_scrypt-ref.c, but any errors in this
  port are solely the fault of its author, Will Glozer.


  com.lambdaworks.crypto.SCryptUtil implements a modified version of MCF,
  the modular crypt format, similar to the one used for storage of Unix
  passwords in the MD5, SHA-256, and bcrypt formats.

    SCryptUtil.scrypt(passwd, N, r, p)
    SCryptUtil.check(passwd, hashed)

  The output of SCryptUtil.scrypt is a string in the modified MCF format:


  s0     - version 0 of the format with 128-bit salt and 256-bit derived key
  params - 32-bit hex integer containing log2(N) (16 bits), r (8 bits), and p (8 bits)
  salt   - base64-encoded salt
  key    - base64-encoded derived key



    passwd = "secret"
         N = 16384
         r = 8
         p = 1

Maven Artifacts

  Releases containing the pure Java implementation, as well as native libraries
  for a limited number of platforms, are available in the maven central repository.


Native Code Implementation

  The native/ directory contains the SSE-optimized C implementation of scrypt
  along with JNI bindings and can be built with the usual autotools
  ./configure && make

  When the native library can be loaded it will be used instead of the pure
  Java implementation.