Java Examples for org.xbill.DNS.DNSSEC.DNSSECException

The following java examples will help you to understand the usage of org.xbill.DNS.DNSSEC.DNSSECException. These source code samples are taken from different open source projects.

Example 1
Project: DNSSEC4J-master  File: DnsSec.java View source code
/**
     * Access the specified URL and verifies the signatures of DNSSEC responses
     * if they exist, returning the resolved IP address. 
     * 
     * @param name The name of the site.
     * @return The IP address for the specified domain, verified if possible.
     * @throws IOException If there's an IO error accessing the nameservers or
     * sending or receiving messages with them.
     * @throws DNSSECException If there's a DNS error verifying the signatures
     * for any domain.
     */
public static InetAddress getByName(final String name) throws DNSSECException, IOException {
    final Name full = Name.concatenate(Name.fromString(name), Name.root);
    System.out.println("Verifying record: " + full);
    //final String [] servers = ResolverConfig.getCurrentConfig().servers();
    final Resolver res = newResolver();
    final Record question = Record.newRecord(full, Type.A, DClass.IN);
    final Message query = Message.newQuery(question);
    System.out.println("Sending query...");
    final Message response = res.send(query);
    System.out.println("RESPONSE: " + response);
    final RRset[] answer = response.getSectionRRsets(Section.ANSWER);
    final ArrayList<InetAddress> addresses = new ArrayList<InetAddress>();
    for (final RRset set : answer) {
        System.out.println("\n;; RRset to chase:");
        // First check for a CNAME and target.
        Iterator<Record> rrIter = set.rrs();
        boolean hasCname = false;
        Name cNameTarget = null;
        while (rrIter.hasNext()) {
            final Record rec = rrIter.next();
            final int type = rec.getType();
            if (type == Type.CNAME) {
                final CNAMERecord cname = (CNAMERecord) rec;
                hasCname = true;
                cNameTarget = cname.getTarget();
            }
        }
        rrIter = set.rrs();
        while (rrIter.hasNext()) {
            final Record rec = rrIter.next();
            System.out.println(rec);
            final int type = rec.getType();
            if (type == Type.A) {
                final ARecord arec = (ARecord) rec;
                if (hasCname) {
                    if (rec.getName().equals(cNameTarget)) {
                        addresses.add(arec.getAddress());
                    }
                } else {
                    addresses.add(arec.getAddress());
                }
            }
        }
        final Iterator<Record> sigIter = set.sigs();
        while (sigIter.hasNext()) {
            final RRSIGRecord rec = (RRSIGRecord) sigIter.next();
            System.out.println("\n;; RRSIG of the RRset to chase:");
            System.out.println(rec);
            verifyZone(set, rec);
        }
    }
    return addresses.get(0);
}
Example 2
Project: dnssecjava-master  File: NSEC3ValUtils.java View source code
private boolean validIterations(SRRset nsec, KeyCache keyCache) {
    SRRset dnskeyRrset = keyCache.find(nsec.getSignerName(), nsec.getDClass()).getRRset();
    // algorithms that may have been used to sign the NSEC3 RRsets.
    try {
        for (Iterator<?> i = dnskeyRrset.rrs(); i.hasNext(); ) {
            DNSKEYRecord dnskey = (DNSKEYRecord) i.next();
            int keysize;
            switch(dnskey.getAlgorithm()) {
                case Algorithm.RSAMD5:
                    // obsoleted by rfc6944
                    return false;
                case Algorithm.RSASHA1:
                case Algorithm.RSASHA256:
                case Algorithm.RSASHA512:
                case Algorithm.RSA_NSEC3_SHA1:
                    keysize = ((RSAPublicKey) dnskey.getPublicKey()).getModulus().bitLength();
                    break;
                case Algorithm.DSA:
                case Algorithm.DSA_NSEC3_SHA1:
                    keysize = ((DSAPublicKey) dnskey.getPublicKey()).getParams().getP().bitLength();
                    break;
                case Algorithm.ECDSAP256SHA256:
                case Algorithm.ECDSAP384SHA384:
                    keysize = ((ECPublicKey) dnskey.getPublicKey()).getParams().getCurve().getField().getFieldSize();
                    break;
                default:
                    return false;
            }
            Integer keyIters = this.maxIterations.floorKey(keysize);
            if (keyIters == null) {
                keyIters = this.maxIterations.firstKey();
            }
            keyIters = this.maxIterations.get(keyIters);
            if (((NSEC3Record) nsec.first()).getIterations() > keyIters) {
                return false;
            }
        }
        return true;
    } catch (DNSSECException e) {
        logger.error("Could not get public key from NSEC3 record", e);
        return false;
    }
}
Example 3
Project: AndroidPNClient-master  File: DNSSEC.java View source code
/** Converts a KEY/DNSKEY record into a PublicKey */
static PublicKey toPublicKey(KEYBase r) throws DNSSECException {
    int alg = r.getAlgorithm();
    try {
        switch(alg) {
            case Algorithm.RSAMD5:
            case Algorithm.RSASHA1:
            case Algorithm.RSA_NSEC3_SHA1:
            case Algorithm.RSASHA256:
            case Algorithm.RSASHA512:
                return toRSAPublicKey(r);
            case Algorithm.DSA:
            case Algorithm.DSA_NSEC3_SHA1:
                return toDSAPublicKey(r);
            default:
                throw new UnsupportedAlgorithmException(alg);
        }
    } catch (IOException e) {
        throw new MalformedKeyException(r);
    } catch (GeneralSecurityException e) {
        throw new DNSSECException(e.toString());
    }
}
Example 4
Project: jdnssec-tools-master  File: DnsKeyConverter.java View source code
/**
   * Given a DNS KEY record, return the JCA public key
   * 
   * @throws NoSuchAlgorithmException
   */
public PublicKey parseDNSKEYRecord(DNSKEYRecord pKeyRecord) throws NoSuchAlgorithmException {
    if (pKeyRecord.getKey() == null)
        return null;
    // Because we have arbitrarily aliased algorithms, we need to possibly
    // translate the aliased algorithm back to the actual algorithm.
    int originalAlgorithm = mAlgorithms.originalAlgorithm(pKeyRecord.getAlgorithm());
    if (originalAlgorithm <= 0)
        throw new NoSuchAlgorithmException("DNSKEY algorithm " + pKeyRecord.getAlgorithm() + " is unrecognized");
    if (pKeyRecord.getAlgorithm() != originalAlgorithm) {
        pKeyRecord = new DNSKEYRecord(pKeyRecord.getName(), pKeyRecord.getDClass(), pKeyRecord.getTTL(), pKeyRecord.getFlags(), pKeyRecord.getProtocol(), originalAlgorithm, pKeyRecord.getKey());
    }
    try {
        return pKeyRecord.getPublicKey();
    } catch (DNSSECException e) {
        throw new NoSuchAlgorithmException(e);
    }
}