ProductKeyChain.java
- /*
- * ProductPublicKey
- */
- package gov.usgs.earthquake.distribution;
- import gov.usgs.earthquake.product.ProductId;
- import gov.usgs.util.Config;
- import gov.usgs.util.StringUtils;
- import java.security.PublicKey;
- import java.util.Iterator;
- import java.util.List;
- import java.util.LinkedList;
- import java.util.logging.Logger;
- /**
- * A group of keys that can be used to verify product signatures.
- */
- public class ProductKeyChain {
- /** Logging object. */
- private static final Logger LOGGER = Logger.getLogger(ProductKeyChain.class
- .getName());
- /** List of candidate keys. */
- private List<ProductKey> keychain = new LinkedList<ProductKey>();
- /** Empty constructor */
- public ProductKeyChain() {
- }
- /**
- * Constructor for a string of keys
- * @param keys String of keys, separated by commas
- * @param config Config file
- * @throws Exception if error occurs
- */
- public ProductKeyChain(final String keys, final Config config)
- throws Exception {
- this(StringUtils.split(keys, ","), config);
- }
- /**
- * Constructor for list of keys
- * @param keys String list of keys
- * @param config Config file
- * @throws Exception if error occurs
- */
- public ProductKeyChain(final List<String> keys, final Config config)
- throws Exception {
- Iterator<String> iter = keys.iterator();
- while (iter.hasNext()) {
- String keyName = iter.next();
- LOGGER.config("Loading key '" + keyName + "'");
- ProductKey key = (ProductKey) Config.getConfig().getObject(keyName);
- if (key != null) {
- keychain.add(key);
- }
- }
- }
- /**
- * @return the keys
- */
- public List<ProductKey> getKeychain() {
- return keychain;
- }
- /**
- * Find public keys based on configured Keys.
- *
- * @param id ID of product
- * @return an array of candidate keys used to verify a signature.
- */
- public PublicKey[] getProductKeys(final ProductId id) {
- LinkedList<PublicKey> publicKeys = new LinkedList<PublicKey>();
- Iterator<ProductKey> iter = keychain.iterator();
- while (iter.hasNext()) {
- ProductKey key = iter.next();
- if (key.isForProduct(id)) {
- publicKeys.add(key.getKey());
- }
- }
- return publicKeys.toArray(new PublicKey[0]);
- }
- }