source: class FilePublicKeyProvider extends AbstractKeyPairProvider {
  
    public Iterable<KeyPair> loadKeys() {
      if (!SecurityUtils.isBouncyCastleRegistered()) {
        throw new IllegalStateException("BouncyCastle must be registered as a JCE provider");
      }
      List<KeyPair> keys = new ArrayList<KeyPair>();
      for (String file : files) {
        try {
            Object o = KeyPairUtils.readKey(new InputStreamReader(new FileInputStream(file)));
            if (o instanceof KeyPair) {
              keys.add(new KeyPair(((KeyPair)o).getPublic(), null));
            } else if (o instanceof PublicKey) {
              keys.add(new KeyPair((PublicKey)o, null));
            } else if (o instanceof PEMKeyPair) {
              PEMKeyPair keyPair = (PEMKeyPair)o;
              keys.add(convertPemKeyPair(keyPair));
            } else if (o instanceof SubjectPublicKeyInfo) {
              PEMKeyPair keyPair = new PEMKeyPair((SubjectPublicKeyInfo) o, null);
              keys.add(convertPemKeyPair(keyPair));
            } else {
              throw new UnsupportedOperationException(String.format("Key type %s not supported.", o.getClass().getName()));
            }
        }
        catch (Exception e) {
          LOG.info("Unable to read key {}: {}", file, e);
        }
      }
      return keys;
    }
  
      FilePublicKeyProvider(String[] files);
  
    private KeyPair convertPemKeyPair(PEMKeyPair pemKeyPair);
  
  }
  
  class FilePublicKeyProviderTest {
  
    @Test
    public void test() {
  
target:     String pubKeyFile = Thread.currentThread().getContextClassLoader().getResource("test_authorized_key.pem").getFile();
      assertTrue(new File(pubKeyFile).exists());
      FilePublicKeyProvider SUT = new FilePublicKeyProvider(new String[]{pubKeyFile});
      assertTrue(SUT.loadKeys().iterator().hasNext());
    }
  
  }