⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dnssecverifier.java

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 JAVA
字号:
// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)package org.xbill.DNS.security;import java.util.*;import java.security.*;import org.xbill.DNS.*;import org.xbill.DNS.utils.*;/** * A class that verifies DNS data using digital signatures contained in DNSSEC * SIG records.  DNSSECVerifier stores a set of trusted keys.  Each specific * verification references a cache where additional secure keys may be found. * @see Verifier * @see DNSSEC * * @author Brian Wellington */public class DNSSECVerifier implements Verifier {private Map trustedKeys;/** Creates a new DNSSECVerifier */publicDNSSECVerifier() {	trustedKeys = new HashMap();}/** Adds the specified key to the set of trusted keys */public synchronized voidaddTrustedKey(KEYRecord key) {	Name name = key.getName();	List list = (List) trustedKeys.get(name);	if (list == null)		trustedKeys.put(name, list = new LinkedList());	list.add(key);}/** Adds the specified key to the set of trusted keys */public voidaddTrustedKey(Name name, PublicKey key) {	KEYRecord keyrec;	keyrec = KEYConverter.buildRecord(name, DClass.IN, 0, 0,					  KEYRecord.PROTOCOL_DNSSEC, key);	if (keyrec != null)		addTrustedKey(keyrec);}private PublicKeyfindMatchingKey(Iterator it, int algorithm, int footprint) {	while (it.hasNext()) {		KEYRecord keyrec = (KEYRecord) it.next();		if (keyrec.getAlgorithm() == algorithm &&		    keyrec.getFootprint() == footprint)			return KEYConverter.parseRecord(keyrec);	}	return null;}private synchronized PublicKeyfindTrustedKey(Name name, int algorithm, int footprint) {	List list = (List) trustedKeys.get(name);	if (list == null)		return null;	return findMatchingKey(list.iterator(), algorithm, footprint);}private PublicKeyfindCachedKey(Cache cache, Name name, int algorithm, int footprint) {	RRset [] keysets = cache.findAnyRecords(name, Type.KEY);	if (keysets == null)		return null;	RRset keys = keysets[0];	return findMatchingKey(keys.rrs(), algorithm, footprint);}private PublicKeyfindKey(Cache cache, Name name, int algorithm, int footprint) {	PublicKey key = findTrustedKey(name, algorithm, footprint);	if (key == null && cache != null)		return findCachedKey(cache, name, algorithm, footprint);	return key;}private intverifySIG(RRset set, SIGRecord sigrec, Cache cache) {	PublicKey key = findKey(cache, sigrec.getSigner(),				sigrec.getAlgorithm(), sigrec.getFootprint());	if (key == null)		return DNSSEC.Insecure;	Date now = new Date();	if (now.compareTo(sigrec.getExpire()) > 0 ||	    now.compareTo(sigrec.getTimeSigned()) < 0)	{		System.err.println("Outside of validity period");		return DNSSEC.Failed;	}	byte [] data = DNSSEC.digestRRset(sigrec, set);	byte [] sig;	String algString;	switch (sigrec.getAlgorithm()) {		case DNSSEC.RSAMD5:			sig = sigrec.getSignature();			algString = "MD5withRSA";			break;		case DNSSEC.DSA:			sig = DSASignature.create(sigrec);			algString = "SHA1withDSA";			break;		case DNSSEC.RSASHA1:			sig = sigrec.getSignature();			algString = "SHA1withRSA";			break;		default:			return DNSSEC.Failed;	}	try {		Signature s = Signature.getInstance(algString);		s.initVerify(key);		s.update(data);		return s.verify(sig) ? DNSSEC.Secure : DNSSEC.Failed;	}	catch (GeneralSecurityException e) {		if (Options.check("verboseexceptions"))			System.err.println("Signing data: " + e);		return DNSSEC.Failed;	}}/** * Attempts to verify an RRset.  This does not modify the set. * @param set The RRset to verify * @param cache The Cache where obtained secure keys are found (may be null) * @return The new security status of the set * @see RRset */public intverify(RRset set, Cache cache) {	Iterator sigs = set.sigs();	if (Options.check("verbosesec"))		System.out.print("Verifying " + set.getName() + "/" +				 Type.string(set.getType()) + ": ");	if (!sigs.hasNext()) {		if (Options.check("verbosesec"))			System.out.println("Insecure");		return DNSSEC.Insecure;	}	while (sigs.hasNext()) {		SIGRecord sigrec = (SIGRecord) sigs.next();		if (verifySIG(set, sigrec, cache) == DNSSEC.Secure) {			if (Options.check("verbosesec"))				System.out.println("Secure");			return DNSSEC.Secure;		}	}	if (Options.check("verbosesec"))		System.out.println("Failed");	return DNSSEC.Failed;}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -