/******************************************************************************* * Copyright (c) 2009 Zhao and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Zhao - initial API and implementation *******************************************************************************/ package org.eclipse.php.internal.core.phar.digest; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.Map; public class Digest { public static final String MD5_TYPE = "MD5"; //$NON-NLS-1$ public static final String SHA1_TYPE = "SHA1"; //$NON-NLS-1$ public static final Digest MD5 = new Digest(MD5_TYPE, new byte[] { 1, 0, 0, 0 }); public static final Digest SHA1 = new Digest(SHA1_TYPE, new byte[] { 2, 0, 0, 0 }); // public static final Digest SHA256 = new Digest("SHA256","0004"); // public static final Digest SHA512 = new Digest("SHA512 ","0008"); public static final NullMessageDigest NULL_DIGEST = new NullMessageDigest("NULL"); //$NON-NLS-1$ public static final Map<String, Digest> DIGEST_MAP = new HashMap<String, Digest>(); static { DIGEST_MAP.put(MD5.name, MD5); DIGEST_MAP.put(SHA1.name, SHA1); // DIGEST_MAP.put(SHA256.name, SHA256); // DIGEST_MAP.put(SHA512.name, SHA512); } byte[] bitMap; String name; private MessageDigest digest; public Digest(String name, byte[] bitMap) { this.name = name; this.bitMap = bitMap; } public MessageDigest getDigest() { if (digest == null) { try { digest = MessageDigest.getInstance(name); } catch (NoSuchAlgorithmException e) { digest = NULL_DIGEST; } } return digest; } public byte[] getBitMap() { return bitMap; } public static class NullMessageDigest extends MessageDigest { public NullMessageDigest(String algorithm) { super(algorithm); } @Override protected byte[] engineDigest() { return null; } @Override protected void engineReset() { } @Override protected void engineUpdate(byte input) { } @Override protected void engineUpdate(byte[] input, int offset, int len) { } @Override public byte[] digest() { return null; } } }