blob: cb6ef6612078a069f52c57c414f278268c5d6c41 [file] [log] [blame]
/*******************************************************************************
* Copyright 2014 Trevor Robinson
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.scurrilous.circe;
import com.scurrilous.circe.params.CrcParameters;
import com.scurrilous.circe.params.MurmurHash3Parameters;
import com.scurrilous.circe.params.MurmurHash3Variant;
import com.scurrilous.circe.params.SimpleHashParameters;
import com.scurrilous.circe.params.SipHash24Parameters;
/**
* Static methods to obtain commonly-used hash functions. Note that a suitable
* provider JAR must be made available on the class path. This class does not
* have direct access to specific implementations; it simply constructs the hash
* parameters and uses the {@link Hashes} class to search for a provider.
*/
public final class CommonHashes {
private CommonHashes() {
}
/**
* Returns an incremental stateless hash function implementing the
* {@linkplain CrcParameters#CRC32 CRC-32} checksum algorithm.
*
* @return a CRC-32 stateless incremental integer hash
* @throws UnsupportedOperationException if no provider is available
*/
public static IncrementalIntHash crc32() {
return Hashes.getIncrementalInt(CrcParameters.CRC32);
}
/**
* Returns an incremental stateless hash function implementing the
* {@linkplain CrcParameters#CRC32C CRC-32C} checksum algorithm.
*
* @return a CRC-32C stateless incremental integer hash
* @throws UnsupportedOperationException if no provider is available
*/
public static IncrementalIntHash crc32c() {
return Hashes.getIncrementalInt(CrcParameters.CRC32C);
}
/**
* Returns an incremental stateless hash function implementing the
* {@linkplain CrcParameters#CRC64 CRC-64} checksum algorithm.
*
* @return a CRC-64 stateless incremental long integer hash
* @throws UnsupportedOperationException if no provider is available
*/
public static IncrementalLongHash crc64() {
return Hashes.getIncrementalLong(CrcParameters.CRC64);
}
/**
* Returns a hash function implementing the MurmurHash3 algorithm, 32-bit
* x86 variant, with a seed of 0.
*
* @return a MurmurHash3 32-bit/x86 stateless integer hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatelessIntHash murmur3_32() {
return Hashes.getStatelessInt(new MurmurHash3Parameters(MurmurHash3Variant.X86_32));
}
/**
* Returns a hash function implementing the MurmurHash3 algorithm, 32-bit
* x86 variant, with the given seed value
*
* @param seed the 32-bit seed value
* @return a MurmurHash3 32-bit/x86 stateless integer hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatelessIntHash murmur3_32(int seed) {
return Hashes.getStatelessInt(new MurmurHash3Parameters(MurmurHash3Variant.X86_32, seed));
}
/**
* Returns a hash function implementing the MurmurHash3 algorithm, 128-bit
* x64 variant, with a seed of 0.
*
* @return a MurmurHash3 128-bit/x64 stateful hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatefulHash murmur3_128() {
return Hashes.createStateful(new MurmurHash3Parameters(MurmurHash3Variant.X64_128));
}
/**
* Returns a hash function implementing the MurmurHash3 algorithm, 128-bit
* x64 variant, with the given seed value.
*
* @param seed the 32-bit seed value
* @return a MurmurHash3 128-bit/x64 stateful hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatefulHash murmur3_128(int seed) {
return Hashes.createStateful(new MurmurHash3Parameters(MurmurHash3Variant.X64_128, seed));
}
/**
* Returns a hash function implementing the SipHash-2-4 algorithm (64 bits)
* with the default seed,
* {@code 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F}.
*
* @return a SipHash-2-4 stateless long integer hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatelessLongHash sipHash24() {
return Hashes.getStatelessLong(new SipHash24Parameters());
}
/**
* Returns a hash function implementing the SipHash-2-4 algorithm (64 bits)
* with the given seed value.
*
* @param seedLow the low-order 64 bits of the seed
* @param seedHigh the high-order 64 bits of the seed
* @return a SipHash-2-4 stateless long integer hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatelessLongHash sipHash24(long seedLow, long seedHigh) {
return Hashes.getStatelessLong(new SipHash24Parameters(seedLow, seedHigh));
}
/**
* Returns a hash function implementing the MD5 algorithm (128 bits).
*
* @return an MD5 stateful hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatefulHash md5() {
return Hashes.createStateful(SimpleHashParameters.MD5);
}
/**
* Returns a hash function implementing the SHA-1 algorithm (160 bits).
*
* @return a SHA-1 stateful hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatefulHash sha1() {
return Hashes.createStateful(SimpleHashParameters.SHA1);
}
/**
* Returns a hash function implementing the SHA-256 algorithm (256 bits).
*
* @return a SHA-256 stateful hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatefulHash sha256() {
return Hashes.createStateful(SimpleHashParameters.SHA256);
}
/**
* Returns a hash function implementing the SHA-384 algorithm (384 bits).
*
* @return a SHA-384 stateful hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatefulHash sha384() {
return Hashes.createStateful(SimpleHashParameters.SHA384);
}
/**
* Returns a hash function implementing the SHA-512 algorithm (512 bits).
*
* @return a SHA-512 stateful hash
* @throws UnsupportedOperationException if no provider is available
*/
public static StatefulHash sha512() {
return Hashes.createStateful(SimpleHashParameters.SHA512);
}
}