fr.xephi.authme.security.pbkdf2
Class PBKDF2Engine

java.lang.Object
  extended by fr.xephi.authme.security.pbkdf2.PBKDF2Engine
All Implemented Interfaces:
PBKDF2

public class PBKDF2Engine
extends java.lang.Object
implements PBKDF2

Request for Comments: 2898 PKCS #5: Password-Based Cryptography Specification

Version 2.0

PBKDF2 (P, S, c, dkLen)

Options:

Input:

Output:


A free Java implementation of Password Based Key Derivation Function 2 as defined by RFC 2898. Copyright (c) 2007 Matthias Gärtner

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.

Version:
1.0
Author:
Matthias Gärtner
See Also:
RFC 2898

Constructor Summary
PBKDF2Engine()
          Constructor for PBKDF2 implementation object.
PBKDF2Engine(PBKDF2Parameters parameters)
          Constructor for PBKDF2 implementation object.
PBKDF2Engine(PBKDF2Parameters parameters, PRF prf)
          Constructor for PBKDF2 implementation object.
 
Method Summary
 byte[] deriveKey(java.lang.String inputPassword)
          Convert String-based input to internal byte array, then invoke PBKDF2.
 byte[] deriveKey(java.lang.String inputPassword, int dkLen)
          Convert String-based input to internal byte array, then invoke PBKDF2.
 PBKDF2Parameters getParameters()
          Allow reading of configured parameters.
 PRF getPseudoRandomFunction()
          Get currently set Pseudo Random Function.
static void main(java.lang.String[] args)
          Convenience client function.
 void setParameters(PBKDF2Parameters parameters)
          Allow setting of configured parameters.
 void setPseudoRandomFunction(PRF prf)
          Set the Pseudo Random Function to use.
 boolean verifyKey(java.lang.String inputPassword)
          Convert String-based input to internal byte arrays, then invoke PBKDF2 and verify result against the reference data that is supplied in the PBKDF2Parameters.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PBKDF2Engine

public PBKDF2Engine()
Constructor for PBKDF2 implementation object. PBKDF2 parameters must be passed later.


PBKDF2Engine

public PBKDF2Engine(PBKDF2Parameters parameters)
Constructor for PBKDF2 implementation object. PBKDF2 parameters are passed so that this implementation knows iteration count, method to use and String encoding.

Parameters:
parameters - Data holder for iteration count, method to use et cetera.

PBKDF2Engine

public PBKDF2Engine(PBKDF2Parameters parameters,
                    PRF prf)
Constructor for PBKDF2 implementation object. PBKDF2 parameters are passed so that this implementation knows iteration count, method to use and String encoding.

Parameters:
parameters - Data holder for iteration count, method to use et cetera.
prf - Supply customer Pseudo Random Function.
Method Detail

deriveKey

public byte[] deriveKey(java.lang.String inputPassword)
Description copied from interface: PBKDF2
Convert String-based input to internal byte array, then invoke PBKDF2. Desired key length defaults to Pseudo Random Function block size.

Specified by:
deriveKey in interface PBKDF2
Parameters:
inputPassword - Candidate password to compute the derived key for.
Returns:
internal byte array

deriveKey

public byte[] deriveKey(java.lang.String inputPassword,
                        int dkLen)
Description copied from interface: PBKDF2
Convert String-based input to internal byte array, then invoke PBKDF2.

Specified by:
deriveKey in interface PBKDF2
Parameters:
inputPassword - Candidate password to compute the derived key for.
dkLen - Specify desired key length
Returns:
internal byte array

verifyKey

public boolean verifyKey(java.lang.String inputPassword)
Description copied from interface: PBKDF2
Convert String-based input to internal byte arrays, then invoke PBKDF2 and verify result against the reference data that is supplied in the PBKDF2Parameters.

Specified by:
verifyKey in interface PBKDF2
Parameters:
inputPassword - Candidate password to compute the derived key for.
Returns:
true password match; false incorrect password

getPseudoRandomFunction

public PRF getPseudoRandomFunction()
Description copied from interface: PBKDF2
Get currently set Pseudo Random Function.

Specified by:
getPseudoRandomFunction in interface PBKDF2
Returns:
Currently set Pseudo Random Function

getParameters

public PBKDF2Parameters getParameters()
Description copied from interface: PBKDF2
Allow reading of configured parameters.

Specified by:
getParameters in interface PBKDF2
Returns:
Currently set parameters.

setParameters

public void setParameters(PBKDF2Parameters parameters)
Description copied from interface: PBKDF2
Allow setting of configured parameters.

Specified by:
setParameters in interface PBKDF2

setPseudoRandomFunction

public void setPseudoRandomFunction(PRF prf)
Description copied from interface: PBKDF2
Set the Pseudo Random Function to use. Note that deriveKeys/getPRF does init this object using the supplied candidate password. If this is undesired, one has to override getPRF.

Specified by:
setPseudoRandomFunction in interface PBKDF2
Parameters:
prf - Pseudo Random Function to set.

main

public static void main(java.lang.String[] args)
                 throws java.io.IOException,
                        java.security.NoSuchAlgorithmException
Convenience client function. Convert supplied password with random 8-byte salt and 1000 iterations using HMacSHA1. Assume that password is in ISO-8559-1 encoding. Output result as "Salt:iteration-count:PBKDF2" with binary data in hexadecimal encoding. Example: Password "password" (without the quotes) leads to 48290A0B96C426C3:1000:973899B1D4AFEB3ED371060D0797E0EE0142BD04

Parameters:
args - Supply the password as argument.
Throws:
java.io.IOException
java.security.NoSuchAlgorithmException