fluid-ws-java-client/src/main/java/com/fluidbpm/ws/client/v1/user/AES256Local.java
public static byte[] generateLocalHMAC(
            byte[] encryptedDataParam, String passwordParam, String saltParam, byte[] seedParam){

        byte[] poisonedSeed = poisonBytes(seedParam);

        byte[] passwordSha256 = sha256(
                passwordParam.concat(saltParam).getBytes());

        //Add the seed to the password and SHA-256...
        byte[] derivedKey = sha256(UtilGlobal.addAll(passwordSha256, poisonedSeed));

        return hmacSha256(derivedKey, encryptedDataParam);
    }
public static byte[] generateLocalHMAC(
            byte[] encryptedDataParam, String passwordParam, String saltParam, byte[] seedParam){

        byte[] poisonedSeed = poisonBytes(seedParam);

        byte[] passwordSha256 = sha256(
                passwordParam.concat(saltParam).getBytes());

        //Add the seed to the password and SHA-256...
        byte[] derivedKey = sha256(UtilGlobal.addAll(passwordSha256, poisonedSeed));

        return hmacSha256(derivedKey, encryptedDataParam);
    }
Generate a derived HMAC from {@code encryptedDataParam} using
other params.

@param encryptedDataParam The encrypted data to generate HMAC from.
@param passwordParam Password (clear text) used to derive the key from.
@param saltParam The password salt as passed by the Init request.
@param seedParam Seed to be poisoned
@return Derived HMAC.