public class CryptoUtil
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
private static class |
CryptoUtil.SecureRandomHolder |
Modifier and Type | Field and Description |
---|---|
private static int |
EXCLUDED_CHAR |
private static int |
MAX_ASCII_PRINTABLE_RANGE |
private static int |
MIN_ASCII_PRINTABLE_RANGE |
Constructor and Description |
---|
CryptoUtil() |
Modifier and Type | Method and Description |
---|---|
static byte[] |
hi(javax.crypto.SecretKeyFactory secretKeyFactory,
int keyLength,
char[] value,
byte[] salt,
int iterations)
Compute the "Hi" function for SCRAM.
|
static byte[] |
hmac(javax.crypto.spec.SecretKeySpec secretKeySpec,
javax.crypto.Mac mac,
byte[] message)
Computes the HMAC of a given message.
|
static java.lang.String |
nonce(int size)
Generates a random string (called a 'nonce'), composed of ASCII printable characters, except comma (',').
|
static java.lang.String |
nonce(int size,
java.security.SecureRandom random)
Generates a random string (called a 'nonce'), composed of ASCII printable characters, except comma (',').
|
static byte[] |
xor(byte[] value1,
byte[] value2)
Computes a byte-by-byte xor operation.
|
private static final int MIN_ASCII_PRINTABLE_RANGE
private static final int MAX_ASCII_PRINTABLE_RANGE
private static final int EXCLUDED_CHAR
public static java.lang.String nonce(int size, java.security.SecureRandom random)
size
- The length of the nonce, in characters/bytesrandom
- The SecureRandom to usepublic static java.lang.String nonce(int size)
size
- The length of the nonce, in characters/bytespublic static byte[] hi(javax.crypto.SecretKeyFactory secretKeyFactory, int keyLength, char[] value, byte[] salt, int iterations)
Hi(str, salt, i):
U1 := HMAC(str, salt + INT(1))
U2 := HMAC(str, U1)
...
Ui-1 := HMAC(str, Ui-2)
Ui := HMAC(str, Ui-1)
Hi := U1 XOR U2 XOR ... XOR Ui
where "i" is the iteration count, "+" is the string concatenation
operator, and INT(g) is a 4-octet encoding of the integer g, most
significant octet first.
Hi() is, essentially, PBKDF2 [RFC2898] with HMAC() as the
pseudorandom function (PRF) and with dkLen == output length of
HMAC() == output length of H().
secretKeyFactory
- The SecretKeyFactory to generate the SecretKeykeyLength
- The length of the key (in bits)value
- The char array to compute the Hi functionsalt
- The saltiterations
- The number of iterationspublic static byte[] hmac(javax.crypto.spec.SecretKeySpec secretKeySpec, javax.crypto.Mac mac, byte[] message)
HMAC(key, str): Apply the HMAC keyed hash algorithm (defined in
[RFC2104]) using the octet string represented by "key" as the key
and the octet string "str" as the input string. The size of the
result is the hash result size for the hash function in use. For
example, it is 20 octets for SHA-1 (see [RFC3174]).
secretKeySpec
- A key of the given algorithmmac
- A MAC instance of the given algorithmmessage
- The message to compute the HMACpublic static byte[] xor(byte[] value1, byte[] value2) throws java.lang.IllegalArgumentException
XOR: Apply the exclusive-or operation to combine the octet string
on the left of this operator with the octet string on the right of
this operator. The length of the output and each of the two
inputs will be the same for this use.
value1
- value2
- java.lang.IllegalArgumentException