package org.limewire.security; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledExecutorService; import org.limewire.inject.EagerSingleton; import com.google.inject.Inject; import com.google.inject.name.Named; /** * This class manages the crypto aspects of the security token infrastructure. */ @EagerSingleton public class MACCalculatorRepositoryManager { /** * The generator chain with the private keys. */ private final MACCalculatorRepository repository; @Inject public MACCalculatorRepositoryManager(@Named("backgroundExecutor") ScheduledExecutorService executor, SettingsProvider provider) { repository = new MACCalculatorRotator(executor, new TEAMACCalculatorFactory(), provider); } public MACCalculatorRepositoryManager() { repository = new SimpleMACCalculatorRepository(new TEAMACCalculatorFactory()); } /** * @return the cryptographical output from the provided data. */ public byte[] getMACBytes(SecurityToken.TokenData data) { return repository.getCurrentMACCalculator().getMACBytes(data); } /** * @return true if the provided data matches the token data. */ public Iterable<byte[]> getAllBytes(SecurityToken.TokenData data) { List<byte[]> l = new ArrayList<byte[]>(2); for (MACCalculator validKey : repository.getValidMACCalculators()) l.add(validKey.getMACBytes(data)); return l; } public static MACCalculatorFactory createDefaultCalculatorFactory() { return new TEAMACCalculatorFactory(); } }