From e11bce7ad3e803e80883499fec0ad6e4540ffe43 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 30 Jun 2020 18:03:48 +0200 Subject: Add modified VIATRA-DSE version --- .../src/org/eclipse/viatra/dse/util/Hasher.java | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/util/Hasher.java (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/util/Hasher.java') diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/util/Hasher.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/util/Hasher.java new file mode 100644 index 00000000..0c5d7eba --- /dev/null +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/util/Hasher.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2010-2014, Miklos Foldenyi, Andras Szabolcs Nagy, Abel Hegedus, Akos Horvath, Zoltan Ujhelyi and Daniel Varro + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.viatra.dse.util; + +import java.math.BigInteger; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import org.eclipse.viatra.dse.api.DSEException; + +/** + * Utility class that encapsulates a {@link MessageDigest} instance to aid calculating hash values more easily, and to + * reuse a {@link MessageDigest} instance. + * + */ +public final class Hasher { + private MessageDigest md; + + private static final int HEX = 16; + + private Hasher(MessageDigest md) { + this.md = md; + } + + /** + * Calculates and returns a hash value. + * + * @param data + * the data to be hashed in a {@link String}. + * @return the hash value in some {@link String} representation. + */ + public String hash(String data) { + md.update(data.getBytes(), 0, data.length()); + return new String(md.digest()); + } + + @SuppressWarnings("unused") + private String alternateHashBest(String data) { + md.update(data.getBytes(), 0, data.length()); + return new String(md.digest()); + } + + @SuppressWarnings("unused") + private String alternateHashSecondBest(String data) { + md.update(data.getBytes(), 0, data.length()); + return new BigInteger(1, md.digest()).toString(HEX); + } + + @SuppressWarnings("unused") + private String alternateHashThirdBest(String data) { + md.update(data.getBytes(), 0, data.length()); + byte[] array = md.digest(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < array.length; i++) { + sb.append(Integer.toHexString((int) array[i])); + } + return sb.toString(); + } + + /** + * Returns a {@link Hasher} with an internal {@link MessageDigest} that is based on the protocol named + * {@code protocoll}. + * + * @param protocoll + * the name of the hash algorythm. + * @return the initialized {@link Hasher} + * + * @throws DSEException + * on initialization failure. + */ + public static Hasher getHasher(String protocoll) { + try { + return new Hasher(MessageDigest.getInstance(protocoll)); + } catch (NoSuchAlgorithmException e) { + throw new DSEException(e); + } + } + + public static final String SHA1_PROTOCOLL = "SHA-1"; +} -- cgit v1.2.3-70-g09d2