package org.bouncycastle.cert.dane;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.bouncycastle.operator.DigestCalculator;

A single shot fetcher for a certificate which will only request the specific DNS record if the DANEEntryFetcher used on construction supports it.
/** * A single shot fetcher for a certificate which will only request the specific DNS record if the * DANEEntryFetcher used on construction supports it. */
public class DANECertificateFetcher { private final DANEEntryFetcherFactory fetcherFactory; private final DANEEntrySelectorFactory selectorFactory;
Base constructor.
Params:
  • fetcherFactory – the fetcher to use for resolving requests.
  • digestCalculator – the digest calculator to use for calculating sub-domains.
/** * Base constructor. * * @param fetcherFactory the fetcher to use for resolving requests. * @param digestCalculator the digest calculator to use for calculating sub-domains. */
public DANECertificateFetcher(DANEEntryFetcherFactory fetcherFactory, DigestCalculator digestCalculator) { this.fetcherFactory = fetcherFactory; this.selectorFactory= new DANEEntrySelectorFactory(digestCalculator); }
Fetch the certificates associated with the passed in email address if any exists.
Params:
  • emailAddress – the email address of interest.
Throws:
  • DANEException – in case of an underlying DNS or record parsing problem.
Returns:a list of X509CertificateHolder objects, or an empty list if none present.
/** * Fetch the certificates associated with the passed in email address if any exists. * * @param emailAddress the email address of interest. * @return a list of X509CertificateHolder objects, or an empty list if none present. * @throws DANEException in case of an underlying DNS or record parsing problem. */
public List fetch(String emailAddress) throws DANEException { DANEEntrySelector daneSelector = selectorFactory.createSelector(emailAddress); List matches = fetcherFactory.build(daneSelector.getDomainName()).getEntries(); List certs = new ArrayList(matches.size()); for (Iterator it = matches.iterator(); it.hasNext();) { DANEEntry next = (DANEEntry)it.next(); if (daneSelector.match(next)) { certs.add(next.getCertificate()); } } return Collections.unmodifiableList(certs); } }