/**
*
*/
package freenet.crypt;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.bitpedia.util.TigerTree;
public enum HashType {
// warning: keep in sync with Util.mdProviders!
SHA1(1, 20),
MD5(2, 16),
SHA256(4, "SHA-256", 32),
SHA384(8, "SHA-384", 48),
SHA512(16, "SHA-512", 64),
ED2K(32, null, 16),
TTH(64, null, 24);
/** Bitmask for aggregation. */
public final int bitmask;
/** Name for MessageDigest purposes. Can contain dashes. */
public final String javaName;
public final int hashLength;
HashType(int bitmask, int hashLength) {
this.bitmask = bitmask;
this.javaName = super.name();
this.hashLength = hashLength;
}
HashType(int bitmask, String name, int hashLength) {
this.bitmask = bitmask;
this.javaName = name;
this.hashLength = hashLength;
}
public MessageDigest get() throws NoSuchAlgorithmException {
if(javaName == null) {
if(this.name().equals("ED2K"))
return new Ed2MessageDigest();
if(this.name().equals("TTH"))
return new TigerTree();
}
if(name().equals("SHA256")) {
// User the pool
return freenet.crypt.SHA256.getMessageDigest();
} else {
return MessageDigest.getInstance(javaName, Util.mdProviders.get(javaName));
}
}
public void recycle(MessageDigest md) {
if(this.equals(SHA256)) {
freenet.crypt.SHA256.returnMessageDigest(md);
} // Else no pooling.
}
}