/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.crypt; import java.security.NoSuchAlgorithmException; import javax.crypto.Mac; import freenet.support.Logger; /** * Keeps track of properties of different Message Authentication Code * algorithms available to Freenet including key type, name of the * algorithm, and iv length if required. * @author unixninja92 * */ public enum MACType { HMACSHA256(1, "HmacSHA256", KeyType.HMACSHA256), HMACSHA384(2, "HmacSHA384", KeyType.HMACSHA384), HMACSHA512(2, "HmacSHA512", KeyType.HMACSHA512), Poly1305AES(2, "POLY1305-AES", 16, KeyType.POLY1305AES); /** Bitmask for aggregation. */ public final int bitmask; public final String mac; public final int ivlen; public final KeyType keyType; /** * Creates the HMACSHA256 enum. Sets the ivlen as -1. * @param bitmask * @param mac Name of the algorithm that java uses. * @param type The type of key the alg requires */ private MACType(int bitmask, String mac, KeyType type){ this.bitmask = bitmask; this.mac = mac; ivlen = -1; keyType = type; } /** * Creates the Poly1305 enum. * @param bitmask * @param mac Name of the algorithm that java uses. * @param ivlen Length of the IV * @param type The type of key the alg requires */ private MACType(int bitmask, String mac, int ivlen, KeyType type){ this.bitmask = bitmask; this.mac = mac; this.ivlen = ivlen; keyType = type; } /** * Gets an instance of Mac using the specified algorithm. * @return Returns an instance of Mac */ public final Mac get(){ try { return Mac.getInstance(mac); } catch (NoSuchAlgorithmException e) { throw new Error(e); // Definitely a bug... } } }