package net.i2p.data; /* * free (adj.): unencumbered; not under the control of others * Written by jrandom in 2003 and released into the public domain * with no warranty of any kind, either expressed or implied. * It probably won't make your computer catch on fire, or eat * your children, but it might. Use at your own risk. * */ import java.io.InputStream; import java.io.IOException; /** * Defines the PublicKey as defined by the I2P data structure spec. * A public key is 256byte Integer. The public key represents only the * exponent, not the primes, which are constant and defined in the crypto spec. * * @author jrandom */ public class PublicKey extends SimpleDataStructure { public final static int KEYSIZE_BYTES = 256; private static final int CACHE_SIZE = 1024; private static final SDSCache<PublicKey> _cache = new SDSCache<PublicKey>(PublicKey.class, KEYSIZE_BYTES, CACHE_SIZE); /** * Pull from cache or return new. * Deprecated - used only by deprecated Destination.readBytes(data, off) * * @throws ArrayIndexOutOfBoundsException if not enough bytes, FIXME should throw DataFormatException * @since 0.8.3 */ public static PublicKey create(byte[] data, int off) { return _cache.get(data, off); } /** * Pull from cache or return new * @since 0.8.3 */ public static PublicKey create(InputStream in) throws IOException { return _cache.get(in); } public PublicKey() { super(); } /** @param data must be non-null */ public PublicKey(byte data[]) { super(); if (data == null) throw new IllegalArgumentException("Data must be specified"); _data = data; } /** constructs from base64 * @param base64Data a string of base64 data (the output of .toBase64() called * on a prior instance of PublicKey */ public PublicKey(String base64Data) throws DataFormatException { super(); fromBase64(base64Data); } public int length() { return KEYSIZE_BYTES; } /** * @since 0.9.17 */ public static void clearCache() { _cache.clear(); } }