All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.appcrossings.config.util.FNV Maven / Gradle / Ivy

package com.appcrossings.config.util;

import java.math.BigInteger;

public class FNV {
  private static final BigInteger INIT32  = new BigInteger("811c9dc5",         16);
  private static final BigInteger INIT64  = new BigInteger("cbf29ce484222325", 16);
  private static final BigInteger PRIME32 = new BigInteger("01000193",         16);
  private static final BigInteger PRIME64 = new BigInteger("100000001b3",      16);
  private static final BigInteger MOD32   = new BigInteger("2").pow(32);
  private static final BigInteger MOD64   = new BigInteger("2").pow(64);

  public static BigInteger fnv1_32(byte[] data) {
    BigInteger hash = INIT32;

    for (byte b : data) {
      hash = hash.multiply(PRIME32).mod(MOD32);
      hash = hash.xor(BigInteger.valueOf((int) b & 0xff));
    }

    return hash;
  }

  public static BigInteger fnv1_64(byte[] data) {
    BigInteger hash = INIT64;

    for (byte b : data) {
      hash = hash.multiply(PRIME64).mod(MOD64);
      hash = hash.xor(BigInteger.valueOf((int) b & 0xff));
    }

    return hash;
  }

  public static BigInteger fnv1a_32(byte[] data) {
    BigInteger hash = INIT32;

    for (byte b : data) {
      hash = hash.xor(BigInteger.valueOf((int) b & 0xff));
      hash = hash.multiply(PRIME32).mod(MOD32);
    }

    return hash;
  }

  public static BigInteger fnv1a_64(byte[] data) {
    BigInteger hash = INIT64;

    for (byte b : data) {
      hash = hash.xor(BigInteger.valueOf((int) b & 0xff));
      hash = hash.multiply(PRIME64).mod(MOD64);
    }

    return hash;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy