| /******************************************************************************* |
| * 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); |
| } |
| } |