package at.gv.egiz.asic.impl.verifier; import at.gv.egiz.asic.impl.Verifier; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponse; import org.apache.commons.codec.binary.Hex; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * Created by Andreas Fitzek on 6/17/16. */ public abstract class BaseVerifier implements Verifier { protected static Map hashTranslator = new HashMap(); static { hashTranslator.put("http://www.w3.org/2000/09/xmldsig#sha1", "SHA-1"); hashTranslator.put("http://www.w3.org/2001/04/xmldsig-more#sha224", "SHA-224"); hashTranslator.put("http://www.w3.org/2001/04/xmlenc#sha256", "SHA-256"); hashTranslator.put("http://www.w3.org/2001/04/xmldsig-more#sha384", "SHA-384"); hashTranslator.put("http://www.w3.org/2001/04/xmlenc#sha512", "SHA-512"); hashTranslator.put("http://www.w3.org/2001/04/xmlenc#ripemd160", "RIPEMD-160"); } private static final Logger logger = LoggerFactory.getLogger(BaseVerifier.class); protected boolean compareHash(byte[] reference, byte[] calculated, String refName) { String referenceHex = Hex.encodeHexString(reference); String calculatedHex = Hex.encodeHexString(calculated); if(Arrays.equals(reference, calculated)) { logger.debug("Digest from manifest do match for {}", refName); return true; } else { logger.info("Digest from manifest do not match for {}", refName); logger.info("Digest from manifest for {} : {}", refName, referenceHex); logger.info("Digest from calculated for {} : {}", refName, calculatedHex); return false; } } protected MessageDigest getMessageDigestFromURI(String uri) { try { String algo = hashTranslator.get(uri); if(algo == null) { algo = uri; } return MessageDigest.getInstance(algo); } catch (NoSuchAlgorithmException e) { return null; } } }